1  
   2 import os
   3  
   4 def get_all_rpms():
   5     result = os.popen("rpm -qa --qf '%{name}\n'| sort").readlines()
   6     return map(lambda x: x.strip(), result)
   7  
   8 def get_depends(package):
   9     result = os.popen(r"""apt-cache whatdepends %s | grep -v '^  %s-[^-]\+-[^-]\+$' |\
  10         grep '^  [^ ]' | sed -e 's/  \(.*\)-[^-]\+-[^-]\+$/\1/' | sort -u""" % (package, package)).readlines()
  11     return map(lambda x: x.strip(), result)
  12  
  13 def have_same_entry(list1, list2):
  14     i1, i2 = 0, 0
  15     l1 , l2 = len(list1), len(list2)
  16     while (i1<l1) and (i2<l2):
  17         if (list1[i1]<list2[i2]): i1 += 1
  18         elif (list1[i1]>list2[i2]): i2 += 1
  19         else: return 1
  20     return 0
  21  
  22 def get_lists():
  23     all_rpms = get_all_rpms()
  24     remove = []
  25     keep = []
  26     print "Calculating Depends:"
  27     for pkg in all_rpms:
  28         depends = get_depends(pkg)
  29         if have_same_entry(all_rpms, depends):
  30             remove.append(pkg)
  31             print "%s removed" % pkg
  32         else:
  33             keep.append(pkg)
  34             print "%s kept" % pkg
  35     return keep, remove
  36  
  37 keep, remove = get_lists()
  38  
  39 def write(filename, list):
  40     f = file(filename, "w")
  41     for i in list:
  42         f.write(i)
  43         f.write("\n")
  44     f.close()
  45      
  46 print "Needed packeges"
  47 print keep
  48 write("rpms.keep", keep)
  49 print "other packages"
  50 print remove
  51 write("rpms.remove", remove)

apt/RPM/rpmlist.py (zuletzt geändert am 2007-12-23 22:46:06 durch localhost)