[yum-cvs] yum-utils package-cleanup.py,1.12,1.13

Seth Vidal skvidal at linux.duke.edu
Tue Nov 7 06:20:09 UTC 2006


Update of /home/groups/yum/cvs/yum-utils
In directory login1.linux.duke.edu:/tmp/cvs-serv24131

Modified Files:
	package-cleanup.py 
Log Message:

add in a 'clean old dupes' option to get rid of version-wise-older dupes in
the rpmdb


Index: package-cleanup.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/package-cleanup.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- package-cleanup.py	9 Oct 2006 08:39:15 -0000	1.12
+++ package-cleanup.py	7 Nov 2006 06:20:07 -0000	1.13
@@ -128,8 +128,14 @@
     
     del pkgdict
     
-    for (n,a) in refined.keys():
-        for (e,v,r) in refined[(n,a)]:
+    return refined
+    
+def printDupes(my):
+    """print out the dupe listing"""
+    dupedict = findDupes(my)
+    dupes = []    
+    for (n,a) in dupedict.keys():
+        for (e,v,r) in dupedict[(n,a)]:
             po = my.getInstalledPackageObject((n,a,e,v,r))
             if po.name.startswith('kernel'):
                continue
@@ -143,7 +149,44 @@
         else:
             print '%s-%s-%s.%s' % (pkg.name, pkg.ver, pkg.rel, pkg.arch)
 
-        
+def cleanOldDupes(my, confirmed):
+    """remove all the older duplicates"""
+    dupedict = findDupes(my)
+    removedupes = []
+    for (n,a) in dupedict.keys():
+        if n.startswith('kernel'):
+            continue
+        if n.startswith('gpg-pubkey'):
+            continue
+        (e,v,r) = dupedict[(n,a)][0]
+        lowpo = my.getInstalledPackageObject((n,a,e,v,r))
+
+        for (e,v,r) in dupedict[(n,a)][1:]:
+            po = my.getInstalledPackageObject((n,a,e,v,r))
+            if po.EVR < lowpo.EVR:
+                lowpo = po
+                
+        removedupes.append(lowpo)
+
+    print "I will remove the following old duplicate packages:"
+    for po in removedupes:
+        print "%s" % po
+
+    if not confirmed:
+        if not userconfirm():
+            sys.exit(0)
+
+    for po in removedupes:
+        my.remove(po)
+
+    # Now perform the action transaction
+    my.populateTs()
+    my.ts.check()
+    my.ts.order()
+    my.ts.run(progress,'')
+                 
+
+    
 
 def listLeaves(all):
     """return a packagtuple of any installed packages that
@@ -297,6 +340,8 @@
       help='Agree to anything asked')
     parser.add_option("-d", "--dupes", default=False, dest="dupes", action="store_true",
       help='Scan for duplicates in your rpmdb')
+    parser.add_option("--cleandupes", default=False, dest="cleandupes", action="store_true",
+      help='Scan for duplicates in your rpmdb and cleans out the older versions')    
     parser.add_option("--oldkernels", default=False, dest="kernels",action="store_true",
       help="Remove old kernel and kernel-devel packages")
     parser.add_option("--count",default=2,dest="kernelcount",action="store",
@@ -307,7 +352,7 @@
                 default='/etc/yum.conf', help="config file location")
 
     (opts, args) = parser.parse_args()
-    if not exactlyOne((opts.problems,opts.leaves,opts.kernels,opts.orphans, opts.dupes)): 
+    if not exactlyOne((opts.problems,opts.leaves,opts.kernels,opts.orphans, opts.dupes, opts.cleandupes)): 
         parser.print_help()
         print "Please specify either --problems, --leaves, --orphans or --oldkernels"
         sys.exit(0)
@@ -335,9 +380,17 @@
         sys.exit(0)
 
     if opts.dupes:
-        findDupes(my)
+        printDupes(my)
         sys.exit(0)
-        
+
+    if opts.cleandupes:
+        if os.geteuid() != 0:
+            print "Error: Cannot remove packages as a user, must be root"
+            sys.exit(1)
+    
+        cleanOldDupes(my, opts.confirmed)
+        sys.exit(0)
+            
     if not opts.quiet:
         print "Reading local RPM database"
     pkgs = getLocalRequires(my)




More information about the Yum-cvs-commits mailing list