From b84256830eb532ffcea9837b278c102990ebcf7f Mon Sep 17 00:00:00 2001 From: Till Maas Date: May 08 2015 18:31:51 +0000 Subject: Add dnf support --- diff --git a/fedora-easy-karma.py b/fedora-easy-karma.py index a3d1285..63c3dbf 100755 --- a/fedora-easy-karma.py +++ b/fedora-easy-karma.py @@ -40,7 +40,11 @@ try: except ImportError: pass -import yum +try: + import dnf +except ImportError: + dnf = None + import yum from fedora.client.bodhi import BodhiClient @@ -228,6 +232,38 @@ For patches please use 'git send-email'. """ +class PkgHelper(object): + def __init__(self): + if dnf is not None: + self.my = dnf.Base() + #if not dnf.util.am_i_root(): + # cachedir = dnf.yum.misc.getCacheDir() + # my.conf.cachedir = cachedir + self.my.fill_sack() + self.releasever = dnf.rpm.detect_releasever("/") + self.package_manager = 'dnf' + # make pkg objects subscriptable, i.e. pkg["name"] work + dnf.package.Package.__getitem__ = lambda self, key: \ + getattr(self, key) + else: + self.my = yum.YumBase() + self.my.preconf.debuglevel = 0 + + self.releasever = self.my.conf.yumvar["releasever"] + self.package_manager = 'yum' + + # make pkg objects subscriptable, i.e. pkg["name"] work + yum.rpmsack.RPMInstalledPackage.__getitem__ = lambda self, key: \ + getattr(self, key) + + @property + def installed_packages(self): + if dnf is not None: + return self.my.sack.query().installed() + else: + return self.my.rpmdb.returnPackages() + + class FedoraEasyKarma(object): def __init__(self): usage = FEK_helper.wrap_paragraphs_prefix( @@ -253,7 +289,7 @@ class FedoraEasyKarma(object): parser.add_option("", "--list-rpms-only", dest="list_rpms_only", help="Only list affected rpms", action="store_true", default=False) parser.add_option("", "--no-skip-empty-comment", dest="skip_empty_comment", help="Do not skip update if comment is empty", action="store_false", default=True) parser.add_option("", "--product", dest="product", help="product to query Bodhi for, 'F' for Fedora, 'EL-' for EPEL, default: %default", default="F") - parser.add_option("", "--releasever", dest="releasever", help="releasever to query Bodhi for, default: releasever from yum", default=None) + parser.add_option("", "--releasever", dest="releasever", help="releasever to query Bodhi for, default: releasever from dnf or yum", default=None) parser.add_option("", "--retries", dest="retries", help="Number if retries when submitting a comment in case of an error, default: %default", default=3, type="int") parser.add_option("", "--wrap-bugs", dest="wrap_bugs", help="Apply line-wrapping to bugs", action="store_true", default=False) parser.add_option("", "--wrap-rpms", dest="wrap_rpms", help="Apply line-wrapping to list of installed rpms", action="store_true", default=False) @@ -293,11 +329,10 @@ class FedoraEasyKarma(object): self.options.fas_username = fas_username bc = BodhiClient(username=self.options.fas_username, useragent="Fedora Easy Karma/GIT", retries=self.options.retries) - my = yum.YumBase() - my.preconf.debuglevel = 0 + pkghelper = PkgHelper() if not self.options.releasever: - self.options.releasever = my.conf.yumvar["releasever"] + self.options.releasever = pkghelper.releasever release = "%s%s" % (self.options.product, self.options.releasever) self.options.datadir = os.path.expanduser(self.options.datadir) @@ -310,10 +345,8 @@ class FedoraEasyKarma(object): self.options.installed_min_days) self.info("Getting list of installed packages...") - self.debug("starting yum query") - # make pkg objects subscriptable, i.e. pkg["name"] work - yum.rpmsack.RPMInstalledPackage.__getitem__ = lambda self, key: getattr(self, key) - for pkg in my.rpmdb.returnPackages(): + self.debug("starting %s query" % pkghelper.package_manager) + for pkg in pkghelper.installed_packages: installed = datetime.datetime.fromtimestamp(pkg.installtime) installed_timedelta = now - installed if installed_timedelta < installed_max_days and installed_timedelta > installed_min_days: @@ -414,7 +447,7 @@ class FedoraEasyKarma(object): if not builds: print "No testing packages found, you can run "\ - "'yum update --enablerepo=\"*-testing\"' to install some" + "'%s update --enablerepo=\"*-testing\"' to install some" % pkghelper.package_manager for build in builds: update = testing_builds[build]