[PATCH 3/5] show/edit tag extra options in cli

Mike McLean mikem at redhat.com
Wed Jun 17 19:33:09 UTC 2015


---
 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."""
-- 
1.9.3



More information about the koji-devel mailing list