From 28a40a08794df6b524231426f49c5cb000680236 Mon Sep 17 00:00:00 2001
From: Tomas Kopecek <tkopecek@redhat.com>
Date: Jul 28 2020 10:11:12 +0000
Subject: remove deprecated list-tag-history / tagHistory


Fixes: https://pagure.io/koji/issue/2215

---

diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py
index 3eae261..793e6dc 100644
--- a/cli/koji_cli/commands.py
+++ b/cli/koji_cli/commands.py
@@ -4159,73 +4159,6 @@ def anon_handle_list_tags(goptions, session, args):
             print('')
 
 
-def anon_handle_list_tag_history(goptions, session, args):
-    "[info] Print a history of tag operations"
-    usage = _("usage: %prog list-tag-history [options]")
-    parser = OptionParser(usage=get_usage_str(usage))
-    # Don't use local debug option, this one stays here for backward compatibility
-    # https://pagure.io/koji/issue/2084
-    parser.add_option("--debug", action="store_true", default=goptions.debug, help=SUPPRESS_HELP)
-    parser.add_option("--build", help=_("Only show data for a specific build"))
-    parser.add_option("--package", help=_("Only show data for a specific package"))
-    parser.add_option("--tag", help=_("Only show data for a specific tag"))
-    parser.add_option("--all", action="store_true",
-                      help=_("Allows listing the entire global history"))
-    (options, args) = parser.parse_args(args)
-    koji.util.deprecated("list-tag-history is deprecated and will be removed in a future version. "
-                         "See: https://pagure.io/koji/issue/836")
-
-    if len(args) != 0:
-        parser.error(_("This command takes no arguments"))
-    kwargs = {}
-    limited = False
-    if options.package:
-        kwargs['package'] = options.package
-        limited = True
-    if options.tag:
-        kwargs['tag'] = options.tag
-        limited = True
-    if options.build:
-        kwargs['build'] = options.build
-        limited = True
-    if not limited and not options.all:
-        parser.error(_("Please specify an option to limit the query"))
-
-    ensure_connection(session)
-
-    hist = session.tagHistory(**kwargs)
-    timeline = []
-    for x in hist:
-        event_id = x['revoke_event']
-        if event_id is not None:
-            timeline.append((event_id, x))
-        event_id = x['create_event']
-        timeline.append((event_id, x))
-    timeline.sort(key=lambda entry: entry[0])
-
-    def _histline(event_id, x):
-        if event_id == x['revoke_event']:
-            ts = x['revoke_ts']
-            fmt = "%(name)s-%(version)s-%(release)s untagged from %(tag_name)s"
-            if 'revoker_name' in x:
-                fmt += " by %(revoker_name)s"
-        elif event_id == x['create_event']:
-            ts = x['create_ts']
-            fmt = "%(name)s-%(version)s-%(release)s tagged into %(tag_name)s"
-            if 'creator_name' in x:
-                fmt += " by %(creator_name)s"
-            if x['active']:
-                fmt += " [still active]"
-        else:
-            raise koji.GenericError("unknown event: (%r, %r)" % (event_id, x))
-        time_str = time.asctime(time.localtime(ts))
-        return "%s: %s" % (time_str, fmt % x)
-    for event_id, x in timeline:
-        if options.debug:
-            print("%r" % x)
-        print(_histline(event_id, x))
-
-
 def _print_histline(entry, **kwargs):
     options = kwargs['options']
     event_id, table, create, x = entry
diff --git a/hub/kojihub.py b/hub/kojihub.py
index 9f67b85..808ef5f 100644
--- a/hub/kojihub.py
+++ b/hub/kojihub.py
@@ -7818,62 +7818,6 @@ def query_history(tables=None, **kwargs):
     return ret
 
 
-def tag_history(build=None, tag=None, package=None, active=None, queryOpts=None):
-    """Returns historical tag data
-
-    package: only for given package
-    build: only for given build
-    tag: only for given tag
-
-    Deprecated; will be removed in a future version
-    See: https://pagure.io/koji/issue/836
-    """
-    logger.warning("The tag_history call is deprecated and will be removed in a future version.")
-    fields = ('build.id', 'package.name', 'build.version', 'build.release',
-              'tag.id', 'tag.name', 'tag_listing.active',
-              'tag_listing.create_event', 'tag_listing.revoke_event',
-              'tag_listing.creator_id', 'tag_listing.revoker_id',
-              'creator.name', 'revoker.name',
-              'EXTRACT(EPOCH FROM ev1.time)', 'EXTRACT(EPOCH FROM ev2.time)',
-              'maven_builds.build_id', 'win_builds.build_id')
-    aliases = ('build_id', 'name', 'version', 'release',
-               'tag_id', 'tag_name', 'active',
-               'create_event', 'revoke_event',
-               'creator_id', 'revoker_id',
-               'creator_name', 'revoker_name',
-               'create_ts', 'revoke_ts',
-               'maven_build_id', 'win_build_id')
-    st_complete = koji.BUILD_STATES['COMPLETE']
-    tables = ['tag_listing']
-    joins = ["tag ON tag.id = tag_listing.tag_id",
-             "build ON build.id = tag_listing.build_id",
-             "package ON package.id = build.pkg_id",
-             "events AS ev1 ON ev1.id = tag_listing.create_event",
-             "LEFT OUTER JOIN events AS ev2 ON ev2.id = tag_listing.revoke_event",
-             "users AS creator ON creator.id = tag_listing.creator_id",
-             "LEFT OUTER JOIN users AS revoker ON revoker.id = tag_listing.revoker_id",
-             "LEFT OUTER JOIN maven_builds ON maven_builds.build_id = build.id",
-             "LEFT OUTER JOIN win_builds ON win_builds.build_id = build.id"]
-    clauses = []
-    if tag is not None:
-        tag_id = get_tag_id(tag, strict=True)
-        clauses.append("tag.id = %(tag_id)i")
-    if build is not None:
-        build_id = get_build(build, strict=True)['id']
-        clauses.append("build.id = %(build_id)i")
-    if package is not None:
-        pkg_id = get_package_id(package, strict=True)
-        clauses.append("package.id = %(pkg_id)i")
-    if active is True:
-        clauses.append("tag_listing.active is true")
-    elif active is False:
-        clauses.append("tag_listing.active is not true")
-    query = QueryProcessor(columns=fields, aliases=aliases, tables=tables,
-                           joins=joins, clauses=clauses, values=locals(),
-                           opts=queryOpts)
-    return query.iterate()
-
-
 def untagged_builds(name=None, queryOpts=None):
     """Returns the list of untagged builds"""
     fields = ('build.id', 'package.name', 'build.version', 'build.release')
@@ -10620,7 +10564,6 @@ class RootExports(object):
     CGImport = staticmethod(cg_import)
 
     untaggedBuilds = staticmethod(untagged_builds)
-    tagHistory = staticmethod(tag_history)
     queryHistory = staticmethod(query_history)
 
     deleteBuild = staticmethod(delete_build)
diff --git a/tests/test_cli/data/list-commands.txt b/tests/test_cli/data/list-commands.txt
index 0e9d583..a718f58 100644
--- a/tests/test_cli/data/list-commands.txt
+++ b/tests/test_cli/data/list-commands.txt
@@ -104,7 +104,6 @@ info commands:
         list-hosts                Print the host listing
         list-permissions          List user permissions
         list-pkgs                 Print the package listing for tag or for owner
-        list-tag-history          Print a history of tag operations
         list-tag-inheritance      Print the inheritance information for a tag
         list-tagged               List the builds or rpms in a tag
         list-tags                 Print the list of tags

