Delete double check existing source tag, --batch option is unvisible
Fixes: https://pagure.io/koji/issue/3705
This commit is contained in:
parent
a6a63ed408
commit
378ea8ef2f
2 changed files with 231 additions and 441 deletions
|
|
@ -3706,8 +3706,7 @@ def handle_clone_tag(goptions, session, args):
|
|||
parser.add_option("-f", "--force", action="store_true",
|
||||
help="override tag locks if necessary")
|
||||
parser.add_option("-n", "--test", action="store_true", help=SUPPRESS_HELP)
|
||||
parser.add_option("--batch", type='int', default=100, metavar='SIZE',
|
||||
help="batch size of multicalls [0 to disable, default: %default]")
|
||||
parser.add_option("--batch", type='int', default=100, metavar='SIZE', help=SUPPRESS_HELP)
|
||||
(options, args) = parser.parse_args(args)
|
||||
|
||||
if len(args) != 2:
|
||||
|
|
@ -3740,8 +3739,6 @@ def handle_clone_tag(goptions, session, args):
|
|||
except koji.GenericError:
|
||||
parser.error("No such src-tag: %s" % args[0])
|
||||
dsttag = session.getTag(args[1])
|
||||
if not srctag:
|
||||
parser.error("No such src-tag: %s" % args[0])
|
||||
if (srctag['locked'] and not options.force) \
|
||||
or (dsttag and dsttag['locked'] and not options.force):
|
||||
parser.error("Error: You are attempting to clone from or to a tag which is locked.\n"
|
||||
|
|
|
|||
|
|
@ -19,10 +19,6 @@ class TestCloneTag(utils.CliTestCase):
|
|||
self.session = mock.MagicMock()
|
||||
self.options = mock.MagicMock()
|
||||
self.session.hasPerm.return_value = True
|
||||
self.session.getTag.side_effect = [{'id': 1,
|
||||
'locked': False},
|
||||
{'id': 2,
|
||||
'locked': False}]
|
||||
self.activate_session = mock.patch('koji_cli.commands.activate_session').start()
|
||||
|
||||
self.error_format = """Usage: %s clone-tag [options] <src-tag> <dst-tag>
|
||||
|
|
@ -31,6 +27,90 @@ clone-tag will create the destination tag if it does not already exist
|
|||
|
||||
%s: error: {message}
|
||||
""" % (self.progname, self.progname)
|
||||
self.get_tag_info = {'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}
|
||||
self.tag_groups = [{'name': 'group1',
|
||||
'tag_id': 2,
|
||||
'packagelist': [
|
||||
{'package': 'pkg1',
|
||||
'blocked': False},
|
||||
{'package': 'pkg5',
|
||||
'blocked': False}
|
||||
]},
|
||||
{'name': 'group2',
|
||||
'tag_id': 3,
|
||||
'packagelist': [
|
||||
{'package': 'apkg',
|
||||
'blocked': False},
|
||||
{'package': 'cpkg',
|
||||
'blocked': False}]},
|
||||
{'name': 'group3',
|
||||
'tag_id': 2,
|
||||
'packagelist': [
|
||||
{'package': 'cpkg',
|
||||
'blocked': False},
|
||||
{'package': 'dpkg',
|
||||
'blocked': False}]},
|
||||
{'name': 'group4',
|
||||
'tag_id': 3,
|
||||
'packagelist': [
|
||||
{'package': 'epkg',
|
||||
'blocked': False},
|
||||
{'package': 'fpkg',
|
||||
'blocked': False}]}
|
||||
]
|
||||
self.get_build_config = {
|
||||
'id': 1,
|
||||
'name': 'src-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}
|
||||
self.list_packages = [{'package_id': 1,
|
||||
'package_name': 'pkg1',
|
||||
'blocked': False,
|
||||
'owner_name': 'userA',
|
||||
'tag_name': 'src-tag',
|
||||
'extra_arches': None},
|
||||
{'package_id': 2,
|
||||
'package_name': 'pkg2',
|
||||
'blocked': True,
|
||||
'owner_name': 'userB',
|
||||
'tag_name': 'src-tag-p',
|
||||
'extra_arches': 'arch3 arch4'},
|
||||
{'package_id': 3,
|
||||
'package_name': 'apkg',
|
||||
'blocked': False,
|
||||
'owner_name': 'userA',
|
||||
'tag_name': 'src-tag-p',
|
||||
'extra_arches': 'arch4'},
|
||||
{'package_id': 4,
|
||||
'package_name': 'bpkg',
|
||||
'blocked': False,
|
||||
'owner_name': 'userC',
|
||||
'tag_name': 'src-tag',
|
||||
'extra_arches': 'arch4'},
|
||||
{'package_id': 5,
|
||||
'package_name': 'cpkg',
|
||||
'blocked': True,
|
||||
'owner_name': 'userC',
|
||||
'tag_name': 'src-tag-p',
|
||||
'extra_arches': 'arch4'},
|
||||
{'package_id': 6,
|
||||
'package_name': 'dpkg',
|
||||
'blocked': True,
|
||||
'owner_name': 'userC',
|
||||
'tag_name': 'src-tag',
|
||||
'extra_arches': 'arch4'}
|
||||
]
|
||||
|
||||
def tearDown(self):
|
||||
mock.patch.stopall()
|
||||
|
|
@ -48,6 +128,11 @@ clone-tag will create the destination tag if it does not already exist
|
|||
exit_code=2
|
||||
)
|
||||
self.activate_session.assert_not_called()
|
||||
self.session.hasPerm.assert_not_called()
|
||||
self.session.getBuildConfig.assert_not_called()
|
||||
self.session.getTag.assert_not_called()
|
||||
self.session.snapshotTagModify.assert_not_called()
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
def test_handle_clone_tag_not_admin(self):
|
||||
args = ['src-tag', 'dst-tag']
|
||||
|
|
@ -63,6 +148,10 @@ clone-tag will create the destination tag if it does not already exist
|
|||
)
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.hasPerm.assert_has_calls([call('admin'), call('tag')])
|
||||
self.session.getBuildConfig.assert_not_called()
|
||||
self.session.getTag.assert_not_called()
|
||||
self.session.snapshotTagModify.assert_not_called()
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
def test_handle_clone_tag_same_tag(self):
|
||||
args = ['src-tag', 'src-tag']
|
||||
|
|
@ -75,6 +164,11 @@ clone-tag will create the destination tag if it does not already exist
|
|||
activate_session=None,
|
||||
exit_code=2)
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_not_called()
|
||||
self.session.getTag.assert_not_called()
|
||||
self.session.snapshotTagModify.assert_not_called()
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
def test_handle_clone_tag_invalid_batch(self):
|
||||
args = ['src-tag', 'dst-tag', '--batch=-1']
|
||||
|
|
@ -87,6 +181,11 @@ clone-tag will create the destination tag if it does not already exist
|
|||
activate_session=None,
|
||||
exit_code=2)
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_not_called()
|
||||
self.session.getTag.assert_not_called()
|
||||
self.session.snapshotTagModify.assert_not_called()
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
def test_handle_clone_tag_no_srctag(self):
|
||||
args = ['src-tag', 'dst-tag']
|
||||
|
|
@ -100,12 +199,15 @@ clone-tag will create the destination tag if it does not already exist
|
|||
activate_session=None,
|
||||
exit_code=2)
|
||||
self.activate_session.assert_called_once()
|
||||
self.activate_session.getTag.has_called([call('src-tag'), call('dst-tag')])
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_called_once_with('src-tag', event=None)
|
||||
self.session.getTag.assert_not_called()
|
||||
self.session.snapshotTagModify.assert_not_called()
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
def test_handle_clone_tag_locked(self):
|
||||
args = ['src-tag', 'dst-tag']
|
||||
self.session.getTag.side_effect = [{'id': 1, 'locked': True},
|
||||
{'id': 2, 'locked': False}]
|
||||
self.session.getTag.return_value = {'id': 2, 'locked': True}
|
||||
self.assert_system_exit(
|
||||
handle_clone_tag,
|
||||
self.options,
|
||||
|
|
@ -117,201 +219,42 @@ clone-tag will create the destination tag if it does not already exist
|
|||
activate_session=None,
|
||||
exit_code=2)
|
||||
self.activate_session.assert_called_once()
|
||||
self.activate_session.getTag.has_called([call('src-tag'), call('dst-tag')])
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_called_once_with('src-tag', event=None)
|
||||
self.session.getTag.assert_called_once_with('dst-tag')
|
||||
self.session.snapshotTagModify.assert_not_called()
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
self.activate_session.getTag.has_called([call('src-tag'), call('dst-tag')])
|
||||
|
||||
@mock.patch('sys.stdout', new_callable=six.StringIO)
|
||||
def test_handle_clone_tag_new_dsttag(self, stdout):
|
||||
def test_handle_clone_tag_new_dsttag(self):
|
||||
args = ['src-tag', 'dst-tag', '--all', '-v']
|
||||
self.session.listPackages.return_value = [{'package_id': 1,
|
||||
'package_name': 'pkg1',
|
||||
'blocked': False,
|
||||
'owner_name': 'userA',
|
||||
'tag_name': 'src-tag',
|
||||
'extra_arches': None},
|
||||
{'package_id': 2,
|
||||
'package_name': 'pkg2',
|
||||
'blocked': True,
|
||||
'owner_name': 'userB',
|
||||
'tag_name': 'src-tag-p',
|
||||
'extra_arches': 'arch3 arch4'},
|
||||
{'package_id': 3,
|
||||
'package_name': 'apkg',
|
||||
'blocked': False,
|
||||
'owner_name': 'userA',
|
||||
'tag_name': 'src-tag-p',
|
||||
'extra_arches': 'arch4'}]
|
||||
self.session.listTagged.return_value = [{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-1.1-2',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-1.0-2',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-1.0-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'package_name': 'pkg2',
|
||||
'nvr': 'pkg2-1.0-1',
|
||||
'state': 2,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag-p'}
|
||||
]
|
||||
self.session.getTagGroups.return_value = [{'name': 'group1',
|
||||
'packagelist': [
|
||||
{'package': 'pkg1',
|
||||
'blocked': False},
|
||||
{'package': 'pkg2',
|
||||
'blocked': False}]},
|
||||
{'name': 'group2',
|
||||
'packagelist': [
|
||||
{'package': 'apkg',
|
||||
'blocked': False},
|
||||
{'package': 'bpkg',
|
||||
'blocked': False}]
|
||||
}]
|
||||
self.session.getTag.side_effect = [None,
|
||||
{'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}]
|
||||
self.session.getBuildConfig.side_effect = [{'id': 1,
|
||||
'name': 'src-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}},
|
||||
]
|
||||
self.session.multiCall.return_value = []
|
||||
self.session.listPackages.return_value = [self.list_packages[0], self.list_packages[1],
|
||||
self.list_packages[2]]
|
||||
self.session.getTagGroups.return_value = [self.tag_groups[0], self.tag_groups[1]]
|
||||
self.session.getTag.return_value = None
|
||||
self.session.getBuildConfig.return_value = self.get_build_config
|
||||
handle_clone_tag(self.options, self.session, args)
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.assert_has_calls([call.hasPerm('admin'),
|
||||
call.getBuildConfig('src-tag', event=None),
|
||||
call.getTag('dst-tag'),
|
||||
call.snapshotTag(1, 'dst-tag',
|
||||
builds=True, config=True, event=None,
|
||||
force=None, groups=True,
|
||||
inherit_builds=None, latest_only=None,
|
||||
pkgs=True),
|
||||
])
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_called_once_with('src-tag', event=None)
|
||||
self.session.getTag.assert_called_once_with('dst-tag')
|
||||
self.session.snapshotTag.assert_called_once_with(1, 'dst-tag', builds=True, config=True,
|
||||
event=None, force=None, groups=True,
|
||||
inherit_builds=None, latest_only=None,
|
||||
pkgs=True)
|
||||
self.session.snapshotTagModify.assert_not_called()
|
||||
|
||||
@mock.patch('koji.util.eventFromOpts', return_value={'id': 1000, 'ts': 1000000.11})
|
||||
@mock.patch('sys.stdout', new_callable=six.StringIO)
|
||||
def test_handle_clone_tag_existing_dsttag(self, stdout):
|
||||
args = ['src-tag', 'dst-tag', '--all', '-v']
|
||||
self.session.multiCall.return_value = []
|
||||
self.session.listPackages.side_effect = [[{'package_id': 1,
|
||||
'package_name': 'pkg1',
|
||||
'blocked': False,
|
||||
'owner_name': 'userA',
|
||||
'tag_name': 'src-tag',
|
||||
'extra_arches': None},
|
||||
{'package_id': 2,
|
||||
'package_name': 'pkg2',
|
||||
'blocked': True,
|
||||
'owner_name': 'userB',
|
||||
'tag_name': 'src-tag-p',
|
||||
'extra_arches': 'arch3 arch4'},
|
||||
{'package_id': 3,
|
||||
'package_name': 'apkg',
|
||||
'blocked': False,
|
||||
'owner_name': 'userA',
|
||||
'tag_name': 'src-tag-p',
|
||||
'extra_arches': 'arch4'}],
|
||||
[{'package_id': 1,
|
||||
'package_name': 'pkg1',
|
||||
'blocked': False,
|
||||
'owner_name': 'userA',
|
||||
'tag_name': 'src-tag',
|
||||
'extra_arches': None},
|
||||
{'package_id': 3,
|
||||
'package_name': 'apkg',
|
||||
'blocked': False,
|
||||
'owner_name': 'userA',
|
||||
'tag_name': 'src-tag-p',
|
||||
'extra_arches': 'arch4'},
|
||||
{'package_id': 4,
|
||||
'package_name': 'bpkg',
|
||||
'blocked': False,
|
||||
'owner_name': 'userC',
|
||||
'tag_name': 'src-tag',
|
||||
'extra_arches': 'arch4'},
|
||||
{'package_id': 5,
|
||||
'package_name': 'cpkg',
|
||||
'blocked': True,
|
||||
'owner_name': 'userC',
|
||||
'tag_name': 'src-tag-p',
|
||||
'extra_arches': 'arch4'},
|
||||
{'package_id': 6,
|
||||
'package_name': 'dpkg',
|
||||
'blocked': True,
|
||||
'owner_name': 'userC',
|
||||
'tag_name': 'src-tag',
|
||||
'extra_arches': 'arch4'}
|
||||
]]
|
||||
self.session.listTagged.side_effect = [[{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-1.1-2',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-1.0-2',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-0.1-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-1.0-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'package_name': 'pkg2',
|
||||
'nvr': 'pkg2-1.0-1',
|
||||
'state': 2,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag-p'}
|
||||
],
|
||||
[{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-2.1-2',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'dst-tag'},
|
||||
{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-1.0-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'dst-tag'},
|
||||
{'package_name': 'pkg1',
|
||||
'nvr': 'pkg1-0.1-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'dst-tag'},
|
||||
{'package_name': 'pkg2',
|
||||
'nvr': 'pkg2-1.0-1',
|
||||
'state': 2,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'dst-tag'},
|
||||
{'package_name': 'pkg3',
|
||||
'nvr': 'pkg3-1.0-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'dst-tag'}
|
||||
]]
|
||||
def test_handle_clone_tag_existing_dsttag(self, stdout, event_from_opts_mock):
|
||||
args = ['src-tag', 'dst-tag', '--all', '-v', '--event=123']
|
||||
self.session.listPackages.side_effect = [[self.list_packages[0], self.list_packages[1],
|
||||
self.list_packages[2]],
|
||||
[self.list_packages[0],
|
||||
self.list_packages[2],
|
||||
self.list_packages[3],
|
||||
self.list_packages[4],
|
||||
self.list_packages[5]]
|
||||
]
|
||||
self.session.getTagGroups.side_effect = [[{'name': 'group1',
|
||||
'tag_id': 1,
|
||||
'packagelist': [
|
||||
|
|
@ -332,266 +275,117 @@ clone-tag will create the destination tag if it does not already exist
|
|||
{'package': 'bpkg',
|
||||
'blocked': False}]
|
||||
}],
|
||||
[{'name': 'group1',
|
||||
'tag_id': 2,
|
||||
'packagelist': [
|
||||
{'package': 'pkg1',
|
||||
'blocked': False},
|
||||
{'package': 'pkg5',
|
||||
'blocked': False}
|
||||
]},
|
||||
{'name': 'group2',
|
||||
'tag_id': 3,
|
||||
'packagelist': [
|
||||
{'package': 'apkg',
|
||||
'blocked': False},
|
||||
{'package': 'cpkg',
|
||||
'blocked': False}]},
|
||||
{'name': 'group3',
|
||||
'tag_id': 2,
|
||||
'packagelist': [
|
||||
{'package': 'cpkg',
|
||||
'blocked': False},
|
||||
{'package': 'dpkg',
|
||||
'blocked': False}]},
|
||||
{'name': 'group4',
|
||||
'tag_id': 3,
|
||||
'packagelist': [
|
||||
{'package': 'epkg',
|
||||
'blocked': False},
|
||||
{'package': 'fpkg',
|
||||
'blocked': False}]}
|
||||
]]
|
||||
self.session.getBuildConfig.side_effect = [{'id': 1,
|
||||
'name': 'src-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}]
|
||||
self.session.getTag.side_effect = [{'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}},
|
||||
{'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}]
|
||||
[self.tag_groups[0], self.tag_groups[1],
|
||||
self.tag_groups[2], self.tag_groups[3]]]
|
||||
self.session.getBuildConfig.return_value = self.get_build_config
|
||||
self.session.getTag.return_value = self.get_tag_info
|
||||
handle_clone_tag(self.options, self.session, args)
|
||||
event = {'id': 1000, 'timestr': 'Mon Jan 12 14:46:40 1970'}
|
||||
self.assert_console_message(stdout, "Cloning at event %(id)i (%(timestr)s)\n" % event)
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.assert_has_calls([call.hasPerm('admin'),
|
||||
call.getBuildConfig('src-tag', event=None),
|
||||
call.getTag('dst-tag'),
|
||||
call.snapshotTagModify(1, 'dst-tag',
|
||||
builds=True, config=True,
|
||||
event=None, force=None,
|
||||
groups=True, inherit_builds=None,
|
||||
latest_only=None, pkgs=True,
|
||||
remove=True)
|
||||
])
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_called_once_with('src-tag', event=1000)
|
||||
self.session.getTag.assert_called_once_with('dst-tag')
|
||||
self.session.snapshotTagModify.assert_called_once_with(1, 'dst-tag', builds=True,
|
||||
config=True, event=1000, force=None,
|
||||
groups=True, inherit_builds=None,
|
||||
latest_only=None, pkgs=True,
|
||||
remove=True)
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stdout', new_callable=six.StringIO)
|
||||
def test_handle_clone_tag_existing_dsttag_nodelete(self, stdout):
|
||||
def test_handle_clone_tag_existing_dsttag_nodelete(self):
|
||||
args = ['src-tag', 'dst-tag', '--all', '-v', '--no-delete']
|
||||
self.session.multiCall.return_value = []
|
||||
self.session.listPackages.return_value = []
|
||||
self.session.listTagged.side_effect = [[{'id': 1,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-1.0-23',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'id': 2,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-1.0-21',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'id': 3,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-0.1-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
],
|
||||
[],
|
||||
]
|
||||
self.session.getTagGroups.return_value = []
|
||||
self.session.getBuildConfig.side_effect = [{'id': 1,
|
||||
'name': 'src-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}]
|
||||
self.session.getTag.side_effect = [{'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}},
|
||||
{'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}]
|
||||
self.session.getBuildConfig.return_value = self.get_build_config
|
||||
self.session.getTag.return_value = self.get_tag_info
|
||||
handle_clone_tag(self.options, self.session, args)
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_called_once_with('src-tag', event=None)
|
||||
self.session.getTag.assert_called_once_with('dst-tag')
|
||||
self.session.snapshotTagModify.assert_called_once_with(1, 'dst-tag', builds=True,
|
||||
config=True, event=None, force=None,
|
||||
groups=True, inherit_builds=None,
|
||||
latest_only=None, pkgs=True,
|
||||
remove=False)
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stdout', new_callable=six.StringIO)
|
||||
def test_handle_clone_tag_existing_dsttag_nodelete_1(self, stdout):
|
||||
def test_handle_clone_tag_existing_dsttag_nodelete_1(self):
|
||||
args = ['src-tag', 'dst-tag', '--all', '-v', '--no-delete']
|
||||
self.session.multiCall.return_value = []
|
||||
self.session.listPackages.return_value = []
|
||||
self.session.listTagged.side_effect = [[{'id': 1,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-1.0-23',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'id': 2,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-1.0-21',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'id': 3,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-0.1-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
],
|
||||
[{'id': 1,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-1.0-23',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'id': 3,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-0.1-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'id': 2,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-1.0-21',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
]
|
||||
]
|
||||
self.session.getTagGroups.return_value = []
|
||||
self.session.getTag.side_effect = [{'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}},
|
||||
{'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}]
|
||||
self.session.getBuildConfig.return_value = {
|
||||
'id': 1,
|
||||
'name': 'src-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}
|
||||
self.session.getTag.return_value = self.get_tag_info
|
||||
self.session.getBuildConfig.return_value = self.get_build_config
|
||||
handle_clone_tag(self.options, self.session, args)
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_called_once_with('src-tag', event=None)
|
||||
self.session.getTag.assert_called_once_with('dst-tag')
|
||||
self.session.snapshotTagModify.assert_called_once_with(1, 'dst-tag', builds=True,
|
||||
config=True, event=None, force=None,
|
||||
groups=True, inherit_builds=None,
|
||||
latest_only=None, pkgs=True,
|
||||
remove=False)
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stdout', new_callable=six.StringIO)
|
||||
def test_handle_clone_tag_existing_dsttag_nodelete_2(self, stdout):
|
||||
def test_handle_clone_tag_existing_dsttag_nodelete_2(self):
|
||||
args = ['src-tag', 'dst-tag', '--all', '-v', '--no-delete']
|
||||
self.session.multiCall.return_value = []
|
||||
self.session.listPackages.return_value = []
|
||||
self.session.listTagged.side_effect = [[{'id': 1,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-1.0-23',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'id': 2,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-1.0-21',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'id': 3,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-0.1-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
],
|
||||
[{'id': 2,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-1.0-21',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
{'id': 3,
|
||||
'package_name': 'pkg',
|
||||
'nvr': 'pkg-0.1-1',
|
||||
'state': 1,
|
||||
'owner_name': 'b_owner',
|
||||
'tag_name': 'src-tag'},
|
||||
]
|
||||
]
|
||||
self.session.getTagGroups.return_value = []
|
||||
self.session.getTag.side_effect = [{'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}},
|
||||
{'id': 2,
|
||||
'name': 'dst-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}}]
|
||||
self.session.getBuildConfig.side_effect = [{'id': 1,
|
||||
'name': 'src-tag',
|
||||
'arches': 'arch1 arch2',
|
||||
'perm_id': 1,
|
||||
'maven_support': False,
|
||||
'maven_include_all': True,
|
||||
'locked': False,
|
||||
'extra': {}},
|
||||
]
|
||||
self.session.getTag.return_value = self.get_tag_info
|
||||
self.session.getBuildConfig.return_value = self.get_build_config
|
||||
handle_clone_tag(self.options, self.session, args)
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_called_once_with('src-tag', event=None)
|
||||
self.session.getTag.assert_called_once_with('dst-tag')
|
||||
self.session.snapshotTagModify.assert_called_once_with(1, 'dst-tag', builds=True,
|
||||
config=True, event=None, force=None,
|
||||
groups=True, inherit_builds=None,
|
||||
latest_only=None, pkgs=True,
|
||||
remove=False)
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
def test_handle_clone_tag_option_builds_and_not_pkgs(self):
|
||||
args = ['src-tag', 'dst-tag', '--builds']
|
||||
self.assert_system_exit(
|
||||
handle_clone_tag,
|
||||
self.options,
|
||||
self.session,
|
||||
args,
|
||||
stderr=self.format_error_message(
|
||||
"--builds can't be used without also specifying --pkgs"),
|
||||
activate_session=None,
|
||||
exit_code=2)
|
||||
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.hasPerm.assert_called_once_with('admin')
|
||||
self.session.getBuildConfig.assert_not_called()
|
||||
self.session.getTag.assert_not_called()
|
||||
self.session.snapshotTagModify.assert_not_called()
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
def test_handle_clone_tag_option_test(self):
|
||||
self.session.getTag.return_value = self.get_tag_info
|
||||
self.session.getBuildConfig.return_value = self.get_build_config
|
||||
args = ['src-tag', 'dst-tag', '--test']
|
||||
self.assert_system_exit(
|
||||
handle_clone_tag,
|
||||
self.options,
|
||||
self.session,
|
||||
args,
|
||||
stderr=self.format_error_message(
|
||||
"server-side operation, test output is no longer available"),
|
||||
activate_session=None,
|
||||
exit_code=2)
|
||||
|
||||
self.activate_session.assert_called_once()
|
||||
self.session.hasPerm.assert_not_called()
|
||||
self.session.getBuildConfig.assert_called_once_with('src-tag', event=None)
|
||||
self.session.getTag.assert_called_once_with('dst-tag')
|
||||
self.session.snapshotTagModify.assert_not_called()
|
||||
self.session.snapshotTag.assert_not_called()
|
||||
|
||||
def test_handle_clone_tag_help(self):
|
||||
self.assert_help(
|
||||
|
|
@ -616,7 +410,6 @@ Options:
|
|||
--repo=REPO Clone tag at a specific repo event
|
||||
--notify Send tagging/untagging notifications
|
||||
-f, --force override tag locks if necessary
|
||||
--batch=SIZE batch size of multicalls [0 to disable, default: 100]
|
||||
""" % self.progname)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue