[yum-commits] 3 commits - Makefile show-changed-rco.py yum-utils.spec

James Antill james at osuosl.org
Tue Mar 29 14:18:52 UTC 2011


 Makefile            |    2 
 show-changed-rco.py |  278 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 yum-utils.spec      |    6 -
 3 files changed, 283 insertions(+), 3 deletions(-)

New commits:
commit f033884125067cff576e6e02d98e754ca606403e
Author: James Antill <james at and.org>
Date:   Mon Mar 28 15:44:04 2011 -0400

    Added --ignore-arch and --skip-new to show-changed-rco.

diff --git a/show-changed-rco.py b/show-changed-rco.py
index f57e27c..078feec 100755
--- a/show-changed-rco.py
+++ b/show-changed-rco.py
@@ -161,6 +161,10 @@ def main():
                       help="specify repoid & paths of additional repositories - unique repoid and complete path required, can be specified multiple times. Example. --repofrompath=myrepo,/path/to/repo")
     parser.add_option("--old-packages", action="append",
                       help="packages to use to compare against, instead of installed")
+    parser.add_option("--ignore-arch", action="store_true",
+                      help="ignore arch when searching for old packages")
+    parser.add_option("--skip-new", action="store_true",
+                      help="skip packages without a matching old package")
     parser.add_option("-C", "--cache", action="store_true",
                       help="run from cache only")
     parser.add_option("-c", "--config", dest="conffile", default=None,
@@ -206,17 +210,26 @@ def main():
     npkgs = _get_npkgs(yb, args)
     opkgs = {}
     for pkg in sorted(_get_opkgs(yb, npkgs, opts.old_packages)):
+        opkgs[(pkg.name, pkg.arch)] = pkg
         opkgs[pkg.name] = pkg
 
     for pkg in sorted(npkgs):
-        print "New-Package:", pkg, pkg.ui_from_repo
-
         opkg = None
         oreqs = {}
         oobss = {}
         ocons = {}
-        if pkg.name in opkgs:
-            opkg = opkgs[pkg.name]
+        if opts.ignore_arch:
+            if pkg.name in opkgs:
+                opkg = opkgs[pkg.name]
+        elif (pkg.name, pkg.arch) in opkgs:
+            opkg = opkgs[(pkg.name, pkg.arch)]
+
+        if opkg is None and opts.skip_new:
+            continue
+
+        print "New-Package:", pkg, pkg.ui_from_repo
+
+        if opkg is not None:
             print "Old-Package:", opkg, opkg.ui_from_repo
 
             oreqs = _get_oreqs(pkg, opkg.requires)
commit bebef4feaafd448ad97e9add7504e42f13bb5c6d
Author: James Antill <james at and.org>
Date:   Tue Mar 15 15:08:58 2011 -0400

    Add show-changed-rco to the install.

diff --git a/Makefile b/Makefile
index a12ae1f..668aaf3 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 SUBDIRS = docs po yumutils
 PKGNAME = yum-utils
-UTILS = package-cleanup debuginfo-install repoclosure repomanage repoquery repo-graph repo-rss yumdownloader yum-builddep repotrack reposync repodiff yum-debug-dump yum-debug-restore verifytree yum-groups-manager find-repos-of-install needs-restarting yum-config-manager show-installed
+UTILS = package-cleanup debuginfo-install repoclosure repomanage repoquery repo-graph repo-rss yumdownloader yum-builddep repotrack reposync repodiff yum-debug-dump yum-debug-restore verifytree yum-groups-manager find-repos-of-install needs-restarting yum-config-manager show-installed show-changed-rco
 UTILSROOT = yum-complete-transaction yumdb
 VERSION=$(shell awk '/Version:/ { print $$2 }' ${PKGNAME}.spec)
 RELEASE=$(shell awk -F%: '/Release:/ { print $$2 }' ${PKGNAME}.spec ')
diff --git a/yum-utils.spec b/yum-utils.spec
index 258f525..7959801 100644
--- a/yum-utils.spec
+++ b/yum-utils.spec
@@ -24,8 +24,9 @@ manager. It includes utilities by different authors that make yum easier and
 more powerful to use. These tools include: debuginfo-install, 
 find-repos-of-install, needs-restarting, package-cleanup, repoclosure, 
 repodiff, repo-graph, repomanage, repoquery, repo-rss, reposync,
-repotrack, verifytree, yumdownloader, yum-builddep, yum-complete-transaction, 
-yum-config-manager, yum-debug-dump, yum-debug-restore and yum-groups-manager.
+repotrack, show-installed, show-changed-rco, verifytree, yumdownloader,
+yum-builddep, yum-complete-transaction, yum-config-manager, yum-debug-dump,
+yum-debug-restore and yum-groups-manager.
 
 %package -n yum-updateonboot
 Summary: Run yum update on system boot
@@ -459,6 +460,7 @@ fi
 %{_bindir}/yum-groups-manager
 %{_bindir}/yum-debug-restore
 %{_bindir}/show-installed
+%{_bindir}/show-changed-rco
 %{_sbindir}/yum-complete-transaction
 %{_sbindir}/yumdb
 %{python_sitelib}/yumutils/
commit c349663dae7e7029e20601506fcdcf8541597a13
Author: James Antill <james at and.org>
Date:   Tue Mar 15 15:07:28 2011 -0400

    Show how a new package version changes in requires/conflicts/obsoletes.

diff --git a/show-changed-rco.py b/show-changed-rco.py
new file mode 100755
index 0000000..f57e27c
--- /dev/null
+++ b/show-changed-rco.py
@@ -0,0 +1,265 @@
+#! /usr/bin/python -tt
+
+import yum
+
+import os
+
+from optparse import OptionParser
+from optparse import SUPPRESS_HELP
+
+version = "1.0.0"
+
+
+def _get_npkgs(self, args):
+    pkgs = []
+    for arg in args:
+        if (arg.endswith('.rpm') and (yum.misc.re_remote_url(arg) or
+                                      os.path.exists(arg))):
+            thispkg = yum.packages.YumUrlPackage(self, self.ts, arg)
+            pkgs.append(thispkg)
+        elif self.conf.showdupesfromrepos:
+            pkgs.extend(self.pkgSack.returnPackages(patterns=[arg]))
+        else:                
+            try:
+                pkgs.extend(self.pkgSack.returnNewestByName(patterns=[arg]))
+            except yum.Errors.PackageSackError:
+                pass
+    return pkgs
+
+def _get_opkgs(self, npkgs, old_packages):
+    if old_packages:
+        return _get_npkgs(self, old_packages)
+    pkg_names = set((pkg.name for pkg in npkgs))
+    return self.rpmdb.searchNames(pkg_names)
+
+def _get_oreqs(pkg, reqs):
+    oreqs = {}
+    for req in reqs:
+        (r,f,v) = req
+        if r.startswith('rpmlib('):
+            continue
+
+        if r not in oreqs:
+            oreqs[r] = set([req])
+        else:
+            oreqs[r].add(req)
+    return oreqs
+
+def _get_reqs(pkg, reqs, oreqs, self_prov_check=True):
+    nreqs = set()
+    creqs = set()
+
+    for req in reqs:
+        (r,f,v) = req
+        if r.startswith('rpmlib('):
+            continue
+
+        if r in oreqs and req in oreqs[r]:
+            continue
+
+        if (r in pkg.provides_names or
+            (r[0] == '/' and r in (pkg.filelist + pkg.dirlist +
+                                   pkg.ghostlist))):
+            if not f or pkg.checkPrco('provides', req):
+                continue
+
+        if r in oreqs:
+            creqs.add(req)
+        else:
+            nreqs.add(req)
+
+    return nreqs, creqs
+
+
+def _print_reqs(yb, pkg, reqs, used_repos):
+    out_reqs = {}
+    for req in reqs:
+        (r,f,v) = req
+        seen = {}
+        out_reqs[req] = []
+        for pkg in sorted(yb.rpmdb.searchProvides(req)):
+            key = (pkg.name, pkg.arch)
+            if key in seen and not yb.conf.showdupesfromrepos:
+                continue
+            seen[key] = pkg
+            out_reqs[req].append(pkg)
+            used_repos.append(pkg.ui_from_repo)
+        for pkg in sorted(yb.pkgSack.searchProvides(req)):
+            key = (pkg.name, pkg.arch)
+            if key in seen and not yb.conf.showdupesfromrepos:
+                continue
+            seen[key] = pkg
+            out_reqs[req].append(pkg)
+            used_repos.append(pkg.ui_from_repo)
+    done = set()
+    for req in sorted(out_reqs):
+        if req in done:
+            continue
+        done.add(req)
+        print " ", yum.misc.prco_tuple_to_string(req)
+        for oreq in sorted(out_reqs):
+            if oreq in done:
+                continue
+            if req == oreq:
+                continue
+            if out_reqs[oreq] == out_reqs[req]:
+                print " ", yum.misc.prco_tuple_to_string(oreq)
+                done.add(oreq)
+        for pkg in out_reqs[req]:
+            print "   ", pkg, pkg.ui_from_repo
+
+def _print_sum(title, used_repos, ind=" ", end=' '):
+    if not used_repos:
+        return
+
+    print title
+    crepos = {}
+    installed = 0
+    available = 0
+    for urepo in used_repos:
+        if urepo not in crepos:
+            crepos[urepo] = 0
+        crepos[urepo] += 1
+        if urepo[0] == '@':
+            installed += 1
+        else:
+            available += 1
+
+    if installed:
+        print ind, "Installed:", installed
+    for urepo in sorted(crepos):
+        if urepo[0] != '@':
+            continue
+        print "%s%s" % (ind, "   "), urepo + ":", crepos[urepo]
+    if available:
+        print ind, "Available:", available
+    for urepo in sorted(crepos):
+        if urepo[0] == '@':
+            continue
+        print "%s%s" % (ind, "   "), urepo + ":", crepos[urepo]
+
+    if end:
+        print end
+
+
+def main():
+    parser = OptionParser(version = "Depcheck version %s" % version)
+    parser.add_option("--releasever", default=None,
+                      help="set value of $releasever in yum config and repo files")
+    parser.add_option("--show-duplicates", action="store_true",
+                      dest="show_dupes",
+                      help="show all versions of packages")
+    parser.add_option("--show-dupes", action="store_true",
+                      help=SUPPRESS_HELP)
+    parser.add_option("--repoid", action="append",
+                      help="specify repoids to query, can be specified multiple times (default is all enabled)")
+    parser.add_option("--enablerepo", action="append", dest="enablerepos",
+                      help="specify additional repoids to query, can be specified multiple times")
+    parser.add_option("--disablerepo", action="append", dest="disablerepos",
+                      help="specify repoids to disable, can be specified multiple times")                      
+    parser.add_option("--repofrompath", action="append",
+                      help="specify repoid & paths of additional repositories - unique repoid and complete path required, can be specified multiple times. Example. --repofrompath=myrepo,/path/to/repo")
+    parser.add_option("--old-packages", action="append",
+                      help="packages to use to compare against, instead of installed")
+    parser.add_option("-C", "--cache", action="store_true",
+                      help="run from cache only")
+    parser.add_option("-c", "--config", dest="conffile", default=None,
+                      help="config file location")
+
+    (opts, args) = parser.parse_args()
+
+
+    yb = yum.YumBase()
+    yb.preconf.releasever = opts.releasever
+    if opts.conffile is not None:
+        yb.preconf.fn = opts.conffile
+
+    if opts.cache:
+        yb.conf.cache = 1
+    elif not yb.setCacheDir():
+        yb.conf.cache = 1
+
+    if opts.show_dupes:
+        yb.conf.showdupesfromrepos = True
+
+    if opts.repoid:
+        found_repos = set()
+        for repo in yb.repos.findRepos('*'):
+            if repo.id not in opts.repoid:
+                repo.disable()
+            else:
+                found_repos.add(repo.id)
+                repo.enable()
+        for not_found in set(opts.repoid).difference(found_repos):
+            yb.logger.error('Repoid %s was not found.' % not_found)
+
+    if opts.disablerepos:
+        for repo_match in opts.disablerepos:
+            for repo in yb.repos.findRepos(repo_match):
+                repo.disable()
+
+    if opts.enablerepos:    
+        for repo_match in opts.enablerepos:
+            for repo in yb.repos.findRepos(repo_match):
+                repo.enable()
+
+    npkgs = _get_npkgs(yb, args)
+    opkgs = {}
+    for pkg in sorted(_get_opkgs(yb, npkgs, opts.old_packages)):
+        opkgs[pkg.name] = pkg
+
+    for pkg in sorted(npkgs):
+        print "New-Package:", pkg, pkg.ui_from_repo
+
+        opkg = None
+        oreqs = {}
+        oobss = {}
+        ocons = {}
+        if pkg.name in opkgs:
+            opkg = opkgs[pkg.name]
+            print "Old-Package:", opkg, opkg.ui_from_repo
+
+            oreqs = _get_oreqs(pkg, opkg.requires)
+            ocons = _get_oreqs(pkg, opkg.conflicts)
+            oobss = _get_oreqs(pkg, opkg.obsoletes)
+
+        used_repos_reqs = []
+        nreqs, creqs = _get_reqs(pkg, pkg.requires, oreqs)
+        if nreqs:
+            print "New-Requires:"
+            _print_reqs(yb, pkg, nreqs, used_repos_reqs)
+        if creqs:
+            print "Modified-Requires:"
+            _print_reqs(yb, pkg, creqs, used_repos_reqs)
+
+        _print_sum("Dep-Requires-Repos:", used_repos_reqs)
+
+        used_repos_cons = []
+        nreqs, creqs = _get_reqs(pkg, pkg.conflicts, ocons)
+        if nreqs:
+            print "New-Conflicts:"
+            _print_reqs(yb, pkg, nreqs, used_repos_cons)
+        if creqs:
+            print "Mod-Conflicts:"
+            _print_reqs(yb, pkg, creqs, used_repos_cons)
+
+        _print_sum("Dep-Conflicts-Repos:", used_repos_cons)
+
+        used_repos_obss = []
+        nreqs, creqs = _get_reqs(pkg, pkg.obsoletes, oobss)
+        if nreqs:
+            print "New-Obsoletes:"
+            _print_reqs(yb, pkg, nreqs, used_repos_obss)
+        if creqs:
+            print "Mod-Obsoletes:"
+            _print_reqs(yb, pkg, creqs, used_repos_obss)
+
+        _print_sum("Dep-Obsoletes-Repos:", used_repos_obss)
+        _print_sum("Dep-Repos:",
+                   used_repos_reqs + used_repos_cons + used_repos_obss,
+                   end='')
+
+
+if __name__ == "__main__":
+    yum.misc.setup_locale()
+    main()


More information about the Yum-commits mailing list