18
18
# CDDL HEADER END
19
19
20
20
#
21
- # Copyright (c) 2008, 2020 , Oracle and/or its affiliates. All rights reserved.
21
+ # Copyright (c) 2008, 2023 , Oracle and/or its affiliates. All rights reserved.
22
22
# Portions Copyright (c) 2017-2018, Chris Fraire <[email protected] >.
23
23
#
24
24
@@ -59,11 +59,48 @@ def get_project_from_options(options):
59
59
return None
60
60
61
61
62
+ def run_indexer (logger , args ):
63
+ """
64
+ Run the indexer and wait for its completion.
65
+ :return: FAILURE_EXITVAL or SUCCESS_EXITVAL
66
+ """
67
+ if args .doprint is None :
68
+ logger .debug ("Console logging is enabled by default" )
69
+ doprint = True
70
+ else :
71
+ doprint = args .doprint [0 ]
72
+ logger .debug ("Console logging: {}" .format (doprint ))
73
+
74
+ optional_args = os .environ .get ("OPENGROK_INDEXER_OPTIONAL_ARGS" )
75
+ options = args .options
76
+ if optional_args and len (optional_args ) > 0 and options :
77
+ logger .debug ("adding optional indexer arguments: {}" .
78
+ format (optional_args ))
79
+ if options :
80
+ options .extend (optional_args .split ())
81
+
82
+ indexer = Indexer (options , logger = logger , java = args .java ,
83
+ jar = args .jar , java_opts = args .java_opts ,
84
+ env_vars = args .environment , doprint = doprint )
85
+ indexer .execute ()
86
+ ret = indexer .getretcode ()
87
+ if ret is None or ret != SUCCESS_EXITVAL :
88
+ # The output is already printed thanks to 'doprint' above.
89
+ logger .error ("Indexer command failed (return code {})" .
90
+ format (ret ))
91
+ return FAILURE_EXITVAL
92
+
93
+ return SUCCESS_EXITVAL
94
+
95
+
62
96
def main ():
63
97
parser = argparse .ArgumentParser (description = 'OpenGrok indexer wrapper' ,
64
98
parents = [get_java_parser ()])
65
99
parser .add_argument ('-C' , '--no_ctags_check' , action = 'store_true' ,
66
100
default = False , help = 'Suppress checking for ctags' )
101
+ parser .add_argument ('--nolock' , action = 'store_true' , default = False ,
102
+ help = 'do not acquire lock that prevents multiple '
103
+ 'instances from running' )
67
104
68
105
try :
69
106
args = parser .parse_args ()
@@ -79,43 +116,22 @@ def main():
79
116
if not args .no_ctags_check and not FindCtags (logger ):
80
117
logger .warning ("Unable to determine Universal CTags command" )
81
118
82
- if args .doprint is None :
83
- logger .debug ("Console logging is enabled by default" )
84
- doprint = True
85
- else :
86
- doprint = args .doprint [0 ]
87
- logger .debug ("Console logging: {}" .format (doprint ))
88
-
89
119
project = get_project_from_options (args .options )
90
120
if project :
91
121
lockfile = project + "-indexer"
92
122
else :
93
123
lockfile = os .path .basename (sys .argv [0 ])
94
124
95
- lock = FileLock (os .path .join (tempfile .gettempdir (), lockfile + ".lock" ))
96
- try :
97
- with lock .acquire (timeout = 0 ):
98
- optional_args = os .environ .get ("OPENGROK_INDEXER_OPTIONAL_ARGS" )
99
- options = args .options
100
- if optional_args and len (optional_args ) > 0 and options :
101
- logger .debug ("adding optional indexer arguments: {}" .
102
- format (optional_args ))
103
- if options :
104
- options .extend (optional_args .split ())
105
-
106
- indexer = Indexer (options , logger = logger , java = args .java ,
107
- jar = args .jar , java_opts = args .java_opts ,
108
- env_vars = args .environment , doprint = doprint )
109
- indexer .execute ()
110
- ret = indexer .getretcode ()
111
- if ret is None or ret != SUCCESS_EXITVAL :
112
- # The output is already printed thanks to 'doprint' above.
113
- logger .error ("Indexer command failed (return code {})" .
114
- format (ret ))
115
- return FAILURE_EXITVAL
116
- except Timeout :
117
- logger .warning ("Already running, exiting." )
118
- return FAILURE_EXITVAL
125
+ if args .nolock :
126
+ return run_indexer (logger , args )
127
+ else :
128
+ lock = FileLock (os .path .join (tempfile .gettempdir (), lockfile + ".lock" ))
129
+ try :
130
+ with lock .acquire (timeout = 0 ):
131
+ return run_indexer (logger , args )
132
+ except Timeout :
133
+ logger .warning ("Already running, exiting." )
134
+ return FAILURE_EXITVAL
119
135
120
136
121
137
if __name__ == '__main__' :
0 commit comments