From c5828a4b8e0e6454bc80ad7ad83dab73dc923fab Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Mon, 19 May 2025 15:29:25 -0400 Subject: [PATCH] update remove-group-pkg with sanity checks --- cli/koji_cli/commands.py | 41 +++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index 198b6daa..be496e4a 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -3101,23 +3101,50 @@ def handle_add_group_pkg(goptions, session, args): def handle_remove_group_pkg(goptions, session, args): - "[admin] Remove a package from a group's package listing" + "[admin] Remove packages from a group's package listing" usage = "usage: %prog remove-group-pkg [options] [ ...]" parser = OptionParser(usage=get_usage_str(usage)) - parser.add_option("--force", action='store_true', help="Override blocks if necessary") (options, args) = parser.parse_args(args) if len(args) < 3: parser.error("You must specify a tag name, group name, and one or more package names") tag = args[0] group = args[1] - opts = {} - opts['force'] = options.force + packages = args[2:] activate_session(session, goptions) - dsttag = session.getTag(tag) - if dsttag is None: + taginfo = session.getTag(tag) + if taginfo is None: error("No such tag: %s" % tag) + + # sanity checks + groups = session.getTagGroups(taginfo['id'], incl_reqs=False, incl_blocked=True) + for ginfo in groups: + if ginfo['name'] == group: + break + else: + error("Group %s is not present in tag %s" % (group, tag)) + pkg_idx = {p['package']: p for p in ginfo['packagelist']} + sane = True + for pkg in packages: + if pkg not in pkg_idx: + print("Package %s is not included in this group" % pkg) + sane = False + continue + pinfo = pkg_idx[pkg] + if pinfo['blocked']: + print("Package %s is blocked in this group. You could use unblock-group-pkg to unblock it" % pkg) + sane = False + continue + if pinfo['tag_id'] != taginfo['id']: + # listing is inherited + srctag = session.getTag(pinfo['tag_id']) + print("The entry for package %s is inherited from %s. You could use block-group-pkg to prevent this" % (pkg, srctag['name'])) + sane = False + continue + if not sane: + error('Invalid parameters') + with session.multicall() as m: - [m.groupPackageListRemove(tag, group, pkg, **opts) for pkg in args[2:]] + [m.groupPackageListRemove(taginfo['id'], group, pkg) for pkg in packages] def handle_block_group_pkg(goptions, session, args):