fix group cloning

This commit is contained in:
Tomas Kopecek 2022-04-04 16:24:39 +02:00 committed by Tester
parent cb1ebe1d30
commit 94991e0de7
2 changed files with 44 additions and 34 deletions

View file

@ -11839,13 +11839,13 @@ class RootExports(object):
if groups:
srcgroups = OrderedDict()
dstgroups = OrderedDict()
for group in readTagGroups(src['name'], event=event):
for group in readTagGroups(src['name'], event=event, incl_blocked=True):
srcgroups[group['name']] = group
for group in readTagGroups(dst['name']):
for group in readTagGroups(dst['name'], incl_blocked=True):
dstgroups[group['name']] = group
for (grpname, group) in srcgroups.items():
if grpname not in dstgroups:
if grpname not in dstgroups or group['blocked'] != dstgroups[grpname]['blocked']:
_grplist_add(dst['id'], group['name'], block=group['blocked'], force=force)
_delete_event_id()
@ -11862,42 +11862,43 @@ class RootExports(object):
for (grpname, group) in srcgroups.items():
if grpname in dstgroups:
_grplist_add(dst['id'], grpname, block=group['blocked'], force=force,
opts=group)
srcgrppkglist = []
dstgrppkglist = []
srcgrppkglist = {}
dstgrppkglist = {}
for pkg in group['packagelist']:
srcgrppkglist.append(pkg)
srcgrppkglist[pkg['package']] = pkg
for pkg in dstgroups[grpname]['packagelist']:
dstgrppkglist.append(pkg)
for pkg in srcgrppkglist:
if pkg not in dstgrppkglist:
dstgrppkglist[pkg['package']] = pkg
for pkg in srcgrppkglist.values():
if pkg['package'] not in dstgrppkglist:
_grp_pkg_add(dst['name'], grpname, pkg['package'],
force=force, block=False)
_delete_event_id()
srcgrpreqlist = []
dstgrpreqlist = []
srcgrpreqlist = {}
dstgrpreqlist = {}
for grp in group['grouplist']:
srcgrpreqlist.append(grp)
srcgrpreqlist[grp['name']] = grp
for grp in dstgroups[grpname]['grouplist']:
dstgrpreqlist.append(grp)
for grp in srcgrpreqlist:
if grp not in dstgrpreqlist:
dstgrpreqlist[grp['name']] = grp
for grp in srcgrpreqlist.values():
if grp['name'] not in dstgrpreqlist:
_grp_req_add(dst['name'], grpname, grp['name'],
force=force, block=grp['blocked'])
_delete_event_id()
if remove:
for pkg in dstgrppkglist:
if pkg not in srcgrppkglist:
if pkg['tag_id'] == dst['id']:
_grp_pkg_remove(dst['name'], grpname, pkg['package'],
force=force)
else:
_grp_pkg_add(dst['id'], grpname, pkg['package'],
block=True, force=force)
for pkgname, pkg in dstgrppkglist.items():
if pkg['blocked']:
continue
if srcgrppkglist.get(pkgname, {}).get('blocked'):
_grp_pkg_add(dst['id'], grpname, pkg['package'],
block=True, force=force)
_delete_event_id()
for grp in dstgrpreqlist:
if grp not in srcgrpreqlist:
elif pkgname not in srcgrppkglist and pkg['tag_id'] == dst['id']:
_grp_pkg_remove(dst['name'], grpname, pkg['package'], force=force)
_delete_event_id()
for grp in dstgrpreqlist.values():
if grp['blocked']:
continue
if grp['name'] not in srcgrpreqlist:
if grp['group_id'] == dst['id']:
_grp_req_remove(dst['name'], grpname, grp['name'], force=force)
else:

View file

@ -117,7 +117,13 @@ class TestSnapshotTagModify(unittest.TestCase):
'id': 1,
'name': 'group1',
'blocked': False,
'packagelist': [{'package': pkg1['package_name'], 'tag_id': src['id']}],
'packagelist': [
{
'package': pkg1['package_name'],
'tag_id': src['id'],
'blocked': False,
}
],
'grouplist': [{'group_id': 5, 'name': 'group5', 'blocked': False}],
'inherited': False,
}
@ -125,7 +131,7 @@ class TestSnapshotTagModify(unittest.TestCase):
'id': 2,
'name': 'group2',
'blocked': False,
'package_list': [],
'packagelist': [],
'grouplist': [],
'inherited': False,
}
@ -133,7 +139,13 @@ class TestSnapshotTagModify(unittest.TestCase):
'id': 3,
'name': 'group1',
'blocked': False,
'packagelist': [{'package': pkg2['package_name'], 'tag_id': dst['id']}],
'packagelist': [
{
'package': pkg2['package_name'],
'tag_id': dst['id'],
'blocked': False,
}
],
'grouplist': [{'group_id': 4, 'name': 'group4', 'blocked': False}],
'inherited': False,
}
@ -201,9 +213,6 @@ class TestSnapshotTagModify(unittest.TestCase):
mock.call('dst', 'group1', 'group5', block=False, force=True),
mock.call('dst', 'group1', 'group4', block=True, force=True),
])
self._grplist_add.assert_has_calls([
mock.call(dst['id'], 'group2', block=False, force=True),
mock.call(dst['id'], 'group1', block=False, force=True, opts=src_group1),
])
self._grplist_add.assert_called_once_with(dst['id'], 'group2', block=False, force=True)
self._grplist_remove.assert_not_called()
self.hub.massTag.assert_not_called()