--- cli/koji | 15 +++++++++++++++ hub/kojihub.py | 41 ++++++++++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 11 deletions(-)
diff --git a/cli/koji b/cli/koji index 908d829..7968460 100755 --- a/cli/koji +++ b/cli/koji @@ -4353,6 +4353,12 @@ def anon_handle_taginfo(options, session, args): if session.mavenEnabled(): print "Maven support?: %s" % (info['maven_support'] and 'yes' or 'no') print "Include all Maven archives?: %s" % (info['maven_include_all'] and 'yes' or 'no') + if 'extra' in info: + print "Tag options:" + keys = info['extra'].keys() + keys.sort() + for key in keys: + print " %s : %s" % (key, pprint.pformat(info['extra'][key])) dest_targets = session.getBuildTargets(destTagID=info['id'], **event_opts) build_targets = session.getBuildTargets(buildTagID=info['id'], **event_opts) repos = {} @@ -4446,6 +4452,8 @@ def handle_edit_tag(options, session, args): parser.add_option("--no-maven-support", action="store_true", help=_("Disable creation of Maven repos for this tag")) parser.add_option("--include-all", action="store_true", help=_("Include all packages in this tag when generating Maven repos")) parser.add_option("--no-include-all", action="store_true", help=_("Do not include all packages in this tag when generating Maven repos")) + parser.add_option("-x", "--extra", action="append", default=[], metavar="key=value", + help=_("Set tag extra option")) (options, args) = parser.parse_args(args) if len(args) != 1: parser.error(_("Please specify a name for the tag")) @@ -4473,6 +4481,13 @@ def handle_edit_tag(options, session, args): opts['maven_include_all'] = True if options.no_include_all: opts['maven_include_all'] = False + if options.extra: + extra = {} + for xopt in options.extra: + key, value = xopt.split('=') + value = arg_filter(value) + extra[key] = value + opts['extra'] = extra #XXX change callname session.editTag2(tag,**opts)
diff --git a/hub/kojihub.py b/hub/kojihub.py index d9dec97..d41e6b8 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -44,6 +44,7 @@ import os import re import rpm import shutil +import simplejson as json import stat import subprocess import sys @@ -2822,7 +2823,7 @@ def get_tag_extra(tagInfo, event=None): result = {} for key, value in query.execute(): try: - value = simplejson.loads(value) + value = json.loads(value) except Exception: # this should not happen raise koji.GenericError("Invalid tag extra data: %s : %r", key, value) @@ -2885,18 +2886,36 @@ def edit_tag(tagInfo, **kwargs): if kwargs.has_key(key) and data[key] != kwargs[key]: changed = True data[key] = kwargs[key] - if not changed: - return + if changed: + update = UpdateProcessor('tag_config', values=data, clauses=['tag_id = %(id)i']) + update.make_revoke() + update.execute()
- update = UpdateProcessor('tag_config', values=data, clauses=['tag_id = %(id)i']) - update.make_revoke() - update.execute() + insert = InsertProcessor('tag_config', data=dslice(data, ('arches', 'perm_id', 'locked'))) + insert.set(tag_id=data['id']) + insert.set(**dslice(data, ('maven_support', 'maven_include_all'))) + insert.make_create() + insert.execute() + + # handle extra data + if 'extra' in kwargs: + for key in kwargs['extra']: + value = kwargs['extra'][key] + if key not in tag['extra'] or tag['extra'] != value: + data = { + 'tag_id' : tag['id'], + 'key' : key, + 'value' : json.dumps(kwargs['extra'][key]), + } + # revoke old entry, if any + update = UpdateProcessor('tag_extra', values=data, clauses=['tag_id = %(tag_id)i', 'key=%(key)s']) + update.make_revoke() + update.execute() + # add new entry + insert = InsertProcessor('tag_extra', data=data) + insert.make_create() + insert.execute()
- insert = InsertProcessor('tag_config', data=dslice(data, ('arches', 'perm_id', 'locked'))) - insert.set(tag_id=data['id']) - insert.set(**dslice(data, ('maven_support', 'maven_include_all'))) - insert.make_create() - insert.execute()
def old_edit_tag(tagInfo, name, arches, locked, permissionID): """Edit information for an existing tag."""