Skip to content

Commit 3f3da1e

Browse files
Vladimir Kotalahornace
authored andcommitted
add ignore_errors property to always return success
fixes #3500
1 parent c0e6959 commit 3f3da1e

File tree

1 file changed

+36
-9
lines changed
  • tools/src/main/python/opengrok_tools/utils

1 file changed

+36
-9
lines changed

tools/src/main/python/opengrok_tools/utils/mirror.py

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
IGNORED_REPOS_PROPERTY = 'ignored_repos'
5353
PROXY_PROPERTY = 'proxy'
5454
INCOMING_PROPERTY = 'incoming_check'
55+
IGNORE_ERR_PROPERTY = 'ignore_errors'
5556
COMMANDS_PROPERTY = 'commands'
5657
DISABLED_PROPERTY = 'disabled'
5758
DISABLED_REASON_PROPERTY = 'disabled-reason'
@@ -159,7 +160,7 @@ def get_project_properties(project_config, project_name, hookdir):
159160
:param project_name: name of the project
160161
:param hookdir: directory with hooks
161162
:return: list of properties: prehook, posthook, hook_timeout,
162-
command_timeout, use_proxy, ignored_repos, check_changes
163+
command_timeout, use_proxy, ignored_repos, check_changes, ignore_errors
163164
"""
164165

165166
prehook = None
@@ -169,6 +170,7 @@ def get_project_properties(project_config, project_name, hookdir):
169170
use_proxy = False
170171
ignored_repos = None
171172
check_changes = None
173+
ignore_errors = None
172174

173175
logger = logging.getLogger(__name__)
174176

@@ -221,11 +223,17 @@ def get_project_properties(project_config, project_name, hookdir):
221223
project_config.get(INCOMING_PROPERTY))
222224
logger.debug("incoming check = {}".format(check_changes))
223225

226+
if project_config.get(IGNORE_ERR_PROPERTY) is not None:
227+
ignore_errors = get_bool(logger, ("ignore errors for project {}".
228+
format(project_name)),
229+
project_config.get(IGNORE_ERR_PROPERTY))
230+
logger.debug("ignore errors = {}".format(check_changes))
231+
224232
if not ignored_repos:
225233
ignored_repos = []
226234

227235
return prehook, posthook, hook_timeout, command_timeout, \
228-
use_proxy, ignored_repos, check_changes
236+
use_proxy, ignored_repos, check_changes, ignore_errors
229237

230238

231239
def process_hook(hook_ident, hook, source_root, project_name, proxy,
@@ -361,6 +369,16 @@ def handle_disabled_project(config, project_name, disabled_msg, headers=None,
361369
run_command(cmd, project_name)
362370

363371

372+
def get_mirror_retcode(ignore_errors, value):
373+
if ignore_errors:
374+
logger = logging.getLogger(__name__)
375+
logger.info("error code is {} however '{}' is on, "
376+
"so returning success".format(IGNORE_ERR_PROPERTY, value))
377+
return SUCCESS_EXITVAL
378+
379+
return value
380+
381+
364382
def mirror_project(config, project_name, check_changes, uri,
365383
source_root, headers=None, timeout=None):
366384
"""
@@ -383,7 +401,8 @@ def mirror_project(config, project_name, check_changes, uri,
383401
project_config = get_project_config(config, project_name)
384402
prehook, posthook, hook_timeout, command_timeout, use_proxy, \
385403
ignored_repos, \
386-
check_changes_proj = get_project_properties(project_config,
404+
check_changes_proj, \
405+
ignore_errors_proj = get_project_properties(project_config,
387406
project_name,
388407
config.
389408
get(HOOKDIR_PROPERTY))
@@ -398,6 +417,11 @@ def mirror_project(config, project_name, check_changes, uri,
398417
else:
399418
check_changes_config = check_changes_proj
400419

420+
if ignore_errors_proj is None:
421+
ignore_errors = config.get(IGNORE_ERR_PROPERTY)
422+
else:
423+
ignore_errors = ignore_errors_proj
424+
401425
proxy = None
402426
if use_proxy:
403427
proxy = config.get(PROXY_PROPERTY)
@@ -439,11 +463,11 @@ def mirror_project(config, project_name, check_changes, uri,
439463
if check_changes:
440464
r = process_changes(repos, project_name, uri, headers=headers)
441465
if r != SUCCESS_EXITVAL:
442-
return r
466+
return get_mirror_retcode(ignore_errors, r)
443467

444468
if not process_hook("pre", prehook, source_root, project_name, proxy,
445469
hook_timeout):
446-
return FAILURE_EXITVAL
470+
return get_mirror_retcode(ignore_errors, FAILURE_EXITVAL)
447471

448472
#
449473
# If one of the repositories fails to sync, the whole project sync
@@ -458,9 +482,9 @@ def mirror_project(config, project_name, check_changes, uri,
458482

459483
if not process_hook("post", posthook, source_root, project_name, proxy,
460484
hook_timeout):
461-
return FAILURE_EXITVAL
485+
return get_mirror_retcode(ignore_errors, FAILURE_EXITVAL)
462486

463-
return ret
487+
return get_mirror_retcode(ignore_errors, ret)
464488

465489

466490
def check_project_configuration(multiple_project_config, hookdir=False,
@@ -479,7 +503,8 @@ def check_project_configuration(multiple_project_config, hookdir=False,
479503
known_project_tunables = [DISABLED_PROPERTY, CMD_TIMEOUT_PROPERTY,
480504
HOOK_TIMEOUT_PROPERTY, PROXY_PROPERTY,
481505
IGNORED_REPOS_PROPERTY, HOOKS_PROPERTY,
482-
DISABLED_REASON_PROPERTY, INCOMING_PROPERTY]
506+
DISABLED_REASON_PROPERTY, INCOMING_PROPERTY,
507+
IGNORE_ERR_PROPERTY]
483508

484509
if not multiple_project_config:
485510
return True
@@ -559,7 +584,9 @@ def check_configuration(config):
559584
global_tunables = [HOOKDIR_PROPERTY, PROXY_PROPERTY, LOGDIR_PROPERTY,
560585
COMMANDS_PROPERTY, PROJECTS_PROPERTY,
561586
HOOK_TIMEOUT_PROPERTY, CMD_TIMEOUT_PROPERTY,
562-
DISABLED_CMD_PROPERTY, INCOMING_PROPERTY]
587+
DISABLED_CMD_PROPERTY, INCOMING_PROPERTY,
588+
IGNORE_ERR_PROPERTY]
589+
563590
diff = set(config.keys()).difference(global_tunables)
564591
if diff:
565592
logger.error("unknown global configuration option(s): '{}'"

0 commit comments

Comments
 (0)