From d5cd816dc4fd57d13ee1d9f212b4289b659a163c Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Oct 05 2020 09:19:13 +0000 Subject: cli: clone-tag --config clones also extra info Fixes: https://pagure.io/koji/issue/2371 --- diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index b5b5a4c..3a55009 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -3427,7 +3427,10 @@ def handle_clone_tag(goptions, session, args): print(_("Cloning at event %(id)i (%(timestr)s)") % event) # store tags. - srctag = session.getTag(args[0], event=event.get('id')) + try: + srctag = session.getBuildConfig(args[0], event=event.get('id')) + except koji.GenericError: + parser.error(_("Unknown src-tag: %s" % args[0])) dsttag = session.getTag(args[1]) if not srctag: parser.error(_("Unknown src-tag: %s" % args[0])) @@ -3449,7 +3452,8 @@ def handle_clone_tag(goptions, session, args): perm=srctag['perm_id'], locked=srctag['locked'], maven_support=srctag['maven_support'], - maven_include_all=srctag['maven_include_all']) + maven_include_all=srctag['maven_include_all'], + extra=srctag['extra']) else: session.createTag(args[1], parent=None) # store the new tag, need its assigned id. @@ -3523,6 +3527,17 @@ def handle_clone_tag(goptions, session, args): _multicall_with_check(session, options.batch) # case of existing dst-tag. if dsttag: + if options.config and not options.test: + if dsttag['extra']: + session.editTag2(dsttag['id'], remove_extra=list(dsttag['extra'].keys())) + session.editTag2(dsttag['id'], parent=None, arches=srctag['arches'], + perm=srctag['perm_id'], + locked=srctag['locked'], + maven_support=srctag['maven_support'], + maven_include_all=srctag['maven_include_all'], + extra=srctag['extra']) + dsttag = session.getTag(dsttag['id'], strict=True) + # get fresh list of packages & builds into maps. srcpkgs = {} dstpkgs = {} diff --git a/tests/test_cli/test_clone_tag.py b/tests/test_cli/test_clone_tag.py index 93f4a9f..6d24ded 100644 --- a/tests/test_cli/test_clone_tag.py +++ b/tests/test_cli/test_clone_tag.py @@ -184,7 +184,8 @@ clone-tag will create the destination tag if it does not already exist 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}, + 'locked': False, + 'extra': {}}, None, {'id': 2, 'name': 'dst-tag', @@ -192,7 +193,8 @@ clone-tag will create the destination tag if it does not already exist 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}] + 'locked': False, + 'extra': {}}] self.session.multiCall.return_value = [] handle_clone_tag(self.options, self.session, args) self.activate_session.assert_called_once() @@ -204,7 +206,8 @@ clone-tag will create the destination tag if it does not already exist locked=False, maven_include_all=True, maven_support=False, - parent=None, perm=1), + parent=None, perm=1, + extra={}), call.getTag('dst-tag', strict=True), call.listPackages(event=None, inherited=True, @@ -460,19 +463,35 @@ List of changes: 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}, + 'locked': False, + 'extra': {}}, {'id': 2, 'name': 'dst-tag', 'arches': 'arch1 arch2', 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}] + 'locked': False, + 'extra': {}}, + {'id': 2, + 'name': 'dst-tag', + 'arches': 'arch1 arch2', + 'perm_id': 1, + 'maven_support': False, + 'maven_include_all': True, + 'locked': False, + 'extra': {}}] handle_clone_tag(self.options, self.session, args) self.activate_session.assert_called_once() self.session.assert_has_calls([call.hasPerm('admin'), call.getTag('src-tag', event=None), call.getTag('dst-tag'), + call.editTag2(2, arches='arch1 arch2', + extra={}, locked=False, + maven_include_all=True, + maven_support=False, + parent=None, perm=1), + call.getTag(2, strict=True), call.listPackages(event=None, inherited=True, tagID=1), @@ -641,14 +660,24 @@ List of changes: 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}, + 'locked': False, + 'extra': {}}, {'id': 2, 'name': 'dst-tag', 'arches': 'arch1 arch2', 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}] + 'locked': False, + 'extra': {}}, + {'id': 2, + 'name': 'dst-tag', + 'arches': 'arch1 arch2', + 'perm_id': 1, + 'maven_support': False, + 'maven_include_all': True, + 'locked': False, + 'extra': {}}] handle_clone_tag(self.options, self.session, args) self.activate_session.assert_called_once() self.assert_console_message(stdout, """ @@ -718,14 +747,24 @@ List of changes: 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}, + 'locked': False, + 'extra': {}}, {'id': 2, 'name': 'dst-tag', 'arches': 'arch1 arch2', 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}] + 'locked': False, + 'extra': {}}, + {'id': 2, + 'name': 'dst-tag', + 'arches': 'arch1 arch2', + 'perm_id': 1, + 'maven_support': False, + 'maven_include_all': True, + 'locked': False, + 'extra': {}}] handle_clone_tag(self.options, self.session, args) self.activate_session.assert_called_once() self.assert_console_message(stdout, """ @@ -788,14 +827,24 @@ List of changes: 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}, + 'locked': False, + 'extra': {}}, {'id': 2, 'name': 'dst-tag', 'arches': 'arch1 arch2', 'perm_id': 1, 'maven_support': False, 'maven_include_all': True, - 'locked': False}] + 'locked': False, + 'extra': {}}, + {'id': 2, + 'name': 'dst-tag', + 'arches': 'arch1 arch2', + 'perm_id': 1, + 'maven_support': False, + 'maven_include_all': True, + 'locked': False, + 'extra': {}}] handle_clone_tag(self.options, self.session, args) self.activate_session.assert_called_once() self.assert_console_message(stdout, """