52
52
IGNORED_REPOS_PROPERTY = 'ignored_repos'
53
53
PROXY_PROPERTY = 'proxy'
54
54
INCOMING_PROPERTY = 'incoming_check'
55
+ IGNORE_ERR_PROPERTY = 'ignore_errors'
55
56
COMMANDS_PROPERTY = 'commands'
56
57
DISABLED_PROPERTY = 'disabled'
57
58
DISABLED_REASON_PROPERTY = 'disabled-reason'
@@ -159,7 +160,7 @@ def get_project_properties(project_config, project_name, hookdir):
159
160
:param project_name: name of the project
160
161
:param hookdir: directory with hooks
161
162
: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
163
164
"""
164
165
165
166
prehook = None
@@ -169,6 +170,7 @@ def get_project_properties(project_config, project_name, hookdir):
169
170
use_proxy = False
170
171
ignored_repos = None
171
172
check_changes = None
173
+ ignore_errors = None
172
174
173
175
logger = logging .getLogger (__name__ )
174
176
@@ -221,11 +223,17 @@ def get_project_properties(project_config, project_name, hookdir):
221
223
project_config .get (INCOMING_PROPERTY ))
222
224
logger .debug ("incoming check = {}" .format (check_changes ))
223
225
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
+
224
232
if not ignored_repos :
225
233
ignored_repos = []
226
234
227
235
return prehook , posthook , hook_timeout , command_timeout , \
228
- use_proxy , ignored_repos , check_changes
236
+ use_proxy , ignored_repos , check_changes , ignore_errors
229
237
230
238
231
239
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,
361
369
run_command (cmd , project_name )
362
370
363
371
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
+
364
382
def mirror_project (config , project_name , check_changes , uri ,
365
383
source_root , headers = None , timeout = None ):
366
384
"""
@@ -383,7 +401,8 @@ def mirror_project(config, project_name, check_changes, uri,
383
401
project_config = get_project_config (config , project_name )
384
402
prehook , posthook , hook_timeout , command_timeout , use_proxy , \
385
403
ignored_repos , \
386
- check_changes_proj = get_project_properties (project_config ,
404
+ check_changes_proj , \
405
+ ignore_errors_proj = get_project_properties (project_config ,
387
406
project_name ,
388
407
config .
389
408
get (HOOKDIR_PROPERTY ))
@@ -398,6 +417,11 @@ def mirror_project(config, project_name, check_changes, uri,
398
417
else :
399
418
check_changes_config = check_changes_proj
400
419
420
+ if ignore_errors_proj is None :
421
+ ignore_errors = config .get (IGNORE_ERR_PROPERTY )
422
+ else :
423
+ ignore_errors = ignore_errors_proj
424
+
401
425
proxy = None
402
426
if use_proxy :
403
427
proxy = config .get (PROXY_PROPERTY )
@@ -439,11 +463,11 @@ def mirror_project(config, project_name, check_changes, uri,
439
463
if check_changes :
440
464
r = process_changes (repos , project_name , uri , headers = headers )
441
465
if r != SUCCESS_EXITVAL :
442
- return r
466
+ return get_mirror_retcode ( ignore_errors , r )
443
467
444
468
if not process_hook ("pre" , prehook , source_root , project_name , proxy ,
445
469
hook_timeout ):
446
- return FAILURE_EXITVAL
470
+ return get_mirror_retcode ( ignore_errors , FAILURE_EXITVAL )
447
471
448
472
#
449
473
# 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,
458
482
459
483
if not process_hook ("post" , posthook , source_root , project_name , proxy ,
460
484
hook_timeout ):
461
- return FAILURE_EXITVAL
485
+ return get_mirror_retcode ( ignore_errors , FAILURE_EXITVAL )
462
486
463
- return ret
487
+ return get_mirror_retcode ( ignore_errors , ret )
464
488
465
489
466
490
def check_project_configuration (multiple_project_config , hookdir = False ,
@@ -479,7 +503,8 @@ def check_project_configuration(multiple_project_config, hookdir=False,
479
503
known_project_tunables = [DISABLED_PROPERTY , CMD_TIMEOUT_PROPERTY ,
480
504
HOOK_TIMEOUT_PROPERTY , PROXY_PROPERTY ,
481
505
IGNORED_REPOS_PROPERTY , HOOKS_PROPERTY ,
482
- DISABLED_REASON_PROPERTY , INCOMING_PROPERTY ]
506
+ DISABLED_REASON_PROPERTY , INCOMING_PROPERTY ,
507
+ IGNORE_ERR_PROPERTY ]
483
508
484
509
if not multiple_project_config :
485
510
return True
@@ -559,7 +584,9 @@ def check_configuration(config):
559
584
global_tunables = [HOOKDIR_PROPERTY , PROXY_PROPERTY , LOGDIR_PROPERTY ,
560
585
COMMANDS_PROPERTY , PROJECTS_PROPERTY ,
561
586
HOOK_TIMEOUT_PROPERTY , CMD_TIMEOUT_PROPERTY ,
562
- DISABLED_CMD_PROPERTY , INCOMING_PROPERTY ]
587
+ DISABLED_CMD_PROPERTY , INCOMING_PROPERTY ,
588
+ IGNORE_ERR_PROPERTY ]
589
+
563
590
diff = set (config .keys ()).difference (global_tunables )
564
591
if diff :
565
592
logger .error ("unknown global configuration option(s): '{}'"
0 commit comments