Skip to content

Commit 6b285d1

Browse files
authored
add opengrok-mirror tunable to ignore a project (#4061)
1 parent 58aa009 commit 6b285d1

File tree

2 files changed

+54
-7
lines changed

2 files changed

+54
-7
lines changed

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
PROXY_PROPERTY = 'proxy'
5656
INCOMING_PROPERTY = 'incoming_check'
5757
IGNORE_ERR_PROPERTY = 'ignore_errors'
58+
IGNORE_PROPERTY = 'ignore'
5859
COMMANDS_PROPERTY = 'commands'
5960
DISABLED_PROPERTY = 'disabled'
6061
DISABLED_REASON_PROPERTY = 'disabled-reason'
@@ -169,7 +170,7 @@ def get_project_properties(project_config, project_name, hookdir):
169170
:param project_name: name of the project
170171
:param hookdir: directory with hooks
171172
:return: list of properties: prehook, posthook, hook_timeout,
172-
command_timeout, use_proxy, ignored_repos, check_changes, strip_outgoing, ignore_errors
173+
command_timeout, use_proxy, ignored_repos, check_changes, strip_outgoing, ignore_errors, ignore
173174
"""
174175

175176
prehook = None
@@ -181,6 +182,7 @@ def get_project_properties(project_config, project_name, hookdir):
181182
check_changes = None
182183
strip_outgoing = None
183184
ignore_errors = None
185+
ignore = None
184186

185187
logger = logging.getLogger(__name__)
186188

@@ -245,11 +247,17 @@ def get_project_properties(project_config, project_name, hookdir):
245247
project_config.get(IGNORE_ERR_PROPERTY))
246248
logger.debug("ignore errors = {}".format(check_changes))
247249

250+
if project_config.get(IGNORE_PROPERTY) is not None:
251+
ignore = get_bool(logger, ("ignore project {}".
252+
format(project_name)),
253+
project_config.get(IGNORE_PROPERTY))
254+
logger.debug("project ignore = {}".format(check_changes))
255+
248256
if not ignored_repos:
249257
ignored_repos = []
250258

251259
return prehook, posthook, hook_timeout, command_timeout, \
252-
use_proxy, ignored_repos, check_changes, strip_outgoing, ignore_errors
260+
use_proxy, ignored_repos, check_changes, strip_outgoing, ignore_errors, ignore
253261

254262

255263
def process_hook(hook_ident, hook, source_root, project_name, proxy,
@@ -460,10 +468,10 @@ def mirror_project(config, project_name, check_changes, strip_outgoing, uri,
460468
ignored_repos, \
461469
check_changes_proj, \
462470
strip_outgoing_proj, \
463-
ignore_errors_proj = get_project_properties(project_config,
464-
project_name,
465-
config.
466-
get(HOOKDIR_PROPERTY))
471+
ignore_errors_proj, \
472+
ignore = get_project_properties(project_config,
473+
project_name,
474+
config.get(HOOKDIR_PROPERTY))
467475

468476
if not command_timeout:
469477
command_timeout = config.get(CMD_TIMEOUT_PROPERTY)
@@ -489,6 +497,10 @@ def mirror_project(config, project_name, check_changes, strip_outgoing, uri,
489497
if use_proxy:
490498
proxy = config.get(PROXY_PROPERTY)
491499

500+
if ignore:
501+
logger.info(f"Project {project_name} ignored per configuration, no mirror performed.")
502+
return SUCCESS_EXITVAL
503+
492504
# We want this to be logged to the log file (if any).
493505
if project_config and project_config.get(DISABLED_PROPERTY):
494506
handle_disabled_project(config, project_name,

tools/src/test/python/test_mirror.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
PROJECTS_PROPERTY, DISABLED_CMD_PROPERTY, DISABLED_PROPERTY, \
4949
CMD_TIMEOUT_PROPERTY, HOOK_TIMEOUT_PROPERTY, DISABLED_REASON_PROPERTY, \
5050
INCOMING_PROPERTY, IGNORE_ERR_PROPERTY, HOOK_PRE_PROPERTY, \
51-
HOOKDIR_PROPERTY, HOOK_POST_PROPERTY, COMMANDS_PROPERTY
51+
HOOKDIR_PROPERTY, HOOK_POST_PROPERTY, COMMANDS_PROPERTY, IGNORE_PROPERTY
5252
from opengrok_tools.utils.patterns import COMMAND_PROPERTY, PROJECT_SUBST, CALL_PROPERTY
5353

5454

@@ -377,6 +377,41 @@ def mock_get_repos(*args, **kwargs):
377377
unstub()
378378

379379

380+
def test_ignore_project():
381+
"""
382+
Test that for ignored projects mirror_project() returns SUCCESS_EXITVAL
383+
and does not perform any tasks.
384+
"""
385+
386+
project_name = "foo"
387+
config = {
388+
PROJECTS_PROPERTY: {
389+
project_name: {IGNORE_PROPERTY: True}
390+
}
391+
}
392+
393+
spy2(opengrok_tools.utils.mirror.get_project_config)
394+
spy2(opengrok_tools.utils.mirror.get_project_properties)
395+
spy2(opengrok_tools.utils.mirror.get_repos_for_project)
396+
397+
src_root = "srcroot"
398+
assert mirror_project(config, project_name, False, False,
399+
None, src_root) == SUCCESS_EXITVAL
400+
401+
verify(opengrok_tools.utils.mirror). \
402+
get_project_config(ANY, project_name)
403+
verify(opengrok_tools.utils.mirror). \
404+
get_project_properties(ANY, project_name, ANY)
405+
# Assumes that get_repos_for_project() is the first function to be called
406+
# in mirror_project() after the project configuration is retrieved.
407+
verify(opengrok_tools.utils.mirror, times=0). \
408+
get_repos_for_project(project_name, ANY, ANY, ...)
409+
410+
# Necessary to disable the spies otherwise mockito will
411+
# complain about recursive invocation.
412+
unstub()
413+
414+
380415
def test_disabled_command_run_args():
381416
"""
382417
Make sure that run_command() calls Command.execute().

0 commit comments

Comments
 (0)