From ff1996564cdc71a044e1e8b2bcab2179c1fb72b5 Mon Sep 17 00:00:00 2001 From: Christopher O'Brien Date: Thu, 19 Dec 2019 11:50:42 -0500 Subject: [PATCH] Disable notifications from clone-tag by default The tagBuildBypass and untagBuildBypass invocations in the clone-tag CLI were not setting the notify option, leaving it at the default of True. This means in some cases many hundreds of notification events would be triggered from a clone-tag call. Change the default behavior of clone-tag to explicitly disable notifications Add a new --notify option to clone-tag to re-enable notifications for tagging and untagging of builds. Fixes: #1890 --- cli/koji_cli/commands.py | 14 ++++++++++---- tests/test_cli/test_clone_tag.py | 31 +++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index d721893d..08c95447 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -3272,6 +3272,8 @@ def handle_clone_tag(goptions, session, args): help=_('Clone tag at a specific repo event')) parser.add_option("-v", "--verbose", action="store_true", help=_("show changes")) + parser.add_option("--notify", action="store_true", default=False, + help=_('Send tagging/untagging notifications')) parser.add_option("-f", "--force", action="store_true", help=_("override tag locks if necessary")) parser.add_option("-n", "--test", action="store_true", help=_("test mode")) @@ -3371,7 +3373,8 @@ def handle_clone_tag(goptions, session, args): if not options.test: session.tagBuildBypass(newtag['name'], build, - force=options.force) + force=options.force, + notify=options.notify) if not options.test: session.multiCall(batch=options.batch) if options.groups: @@ -3546,7 +3549,8 @@ def handle_clone_tag(goptions, session, args): if not options.test: session.untagBuildBypass(dsttag['name'], build, - force=options.force) + force=options.force, + notify=options.notify) if not options.test: session.multiCall(batch=options.batch) # ADD builds. @@ -3565,7 +3569,8 @@ def handle_clone_tag(goptions, session, args): if not options.test: session.tagBuildBypass(dsttag['name'], build, - force=options.force) + force=options.force, + notify=options.notify) if not options.test: session.multiCall(batch=options.batch) # ADD groups. @@ -3631,7 +3636,8 @@ def handle_clone_tag(goptions, session, args): if not options.test: session.untagBuildBypass(dsttag['name'], build, - force=options.force) + force=options.force, + notify=options.notify) # now safe to remove package itself since we resolved its builds. chgpkglist.append(('[del]', pkg['package_name'], diff --git a/tests/test_cli/test_clone_tag.py b/tests/test_cli/test_clone_tag.py index 8257097c..1fde1ced 100644 --- a/tests/test_cli/test_clone_tag.py +++ b/tests/test_cli/test_clone_tag.py @@ -244,25 +244,29 @@ clone-tag will create the destination tag if it does not already exist 'nvr': 'pkg2-1.0-1', 'package_name': 'pkg2', 'state': 2, 'tag_name': 'src-tag-p', - 'name': 'pkg2'}, force=None), + 'name': 'pkg2'}, force=None, + notify=False), call.tagBuildBypass('dst-tag', { 'owner_name': 'b_owner', 'nvr': 'pkg1-1.0-1', 'package_name': 'pkg1', 'state': 1, 'tag_name': 'src-tag', - 'name': 'pkg1'}, force=None), + 'name': 'pkg1'}, force=None, + notify=False), call.tagBuildBypass('dst-tag', { 'owner_name': 'b_owner', 'nvr': 'pkg1-1.0-2', 'package_name': 'pkg1', 'state': 1, 'tag_name': 'src-tag', - 'name': 'pkg1'}, force=None), + 'name': 'pkg1'}, force=None, + notify=False), call.tagBuildBypass('dst-tag', { 'owner_name': 'b_owner', 'nvr': 'pkg1-1.1-2', 'package_name': 'pkg1', 'state': 1, 'tag_name': 'src-tag', - 'name': 'pkg1'}, force=None), + 'name': 'pkg1'}, force=None, + notify=False), call.multiCall(batch=1000), call.getTagGroups('src-tag', event=None), @@ -506,38 +510,44 @@ List of changes: 'nvr': 'pkg1-2.1-2', 'package_name': 'pkg1', 'state': 1, 'tag_name': 'dst-tag', - 'name': 'pkg1'}, force=None), + 'name': 'pkg1'}, force=None, + notify=False), call.untagBuildBypass('dst-tag', { 'owner_name': 'b_owner', 'nvr': 'pkg1-0.1-1', 'package_name': 'pkg1', 'state': 1, 'tag_name': 'dst-tag', - 'name': 'pkg1'}, force=None), + 'name': 'pkg1'}, force=None, + notify=False), call.untagBuildBypass('dst-tag', { 'owner_name': 'b_owner', 'nvr': 'pkg3-1.0-1', 'package_name': 'pkg3', 'state': 1, 'tag_name': 'dst-tag', - 'name': 'pkg3'}, force=None), + 'name': 'pkg3'}, force=None, + notify=False), call.multiCall(batch=1000), call.tagBuildBypass('dst-tag', { 'owner_name': 'b_owner', 'nvr': 'pkg1-0.1-1', 'package_name': 'pkg1', 'state': 1, 'tag_name': 'src-tag', - 'name': 'pkg1'}, force=None), + 'name': 'pkg1'}, force=None, + notify=False), call.tagBuildBypass('dst-tag', { 'owner_name': 'b_owner', 'nvr': 'pkg1-1.0-2', 'package_name': 'pkg1', 'state': 1, 'tag_name': 'src-tag', - 'name': 'pkg1'}, force=None), + 'name': 'pkg1'}, force=None, + notify=False), call.tagBuildBypass('dst-tag', { 'owner_name': 'b_owner', 'nvr': 'pkg1-1.1-2', 'package_name': 'pkg1', 'state': 1, 'tag_name': 'src-tag', - 'name': 'pkg1'}, force=None), + 'name': 'pkg1'}, force=None, + notify=False), call.multiCall(batch=1000), call.multiCall(batch=1000), call.groupPackageListAdd('dst-tag', @@ -633,6 +643,7 @@ Options: --event=EVENT Clone tag at a specific event --repo=REPO Clone tag at a specific repo event -v, --verbose show changes + --notify Send tagging/untagging notifications -f, --force override tag locks if necessary -n, --test test mode --batch=SIZE batch size of multicalls [0 to disable, default: 1000]