[yum-cvs] yum-utils repomanage.py,1.2,1.3
Seth Vidal
skvidal at login.linux.duke.edu
Thu Oct 13 14:53:42 UTC 2005
Update of /home/groups/yum/cvs/yum-utils
In directory login:/tmp/cvs-serv11910
Modified Files:
repomanage.py
Log Message:
add option to repomanage to keep latest N packages.
so now if you do:
repomanage -k 2 -o /some/dir
it will list all but the newest 2 packages (by name, arch)
or if you do:
repomanage -k 2 -n /some/dir
it will list only the newest 2 packages (by name, arch)
handy for keeping the newest N packages around in a repo
Index: repomanage.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/repomanage.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- repomanage.py 13 Jun 2005 04:53:16 -0000 1.2
+++ repomanage.py 13 Oct 2005 14:53:40 -0000 1.3
@@ -141,10 +141,13 @@
options['output'] = 'new'
options['passed'] = []
options['space'] = 0
+ options['keep'] = 1 # number of newest items to keep
+ # (defaults to single newest but it could be newest N)
try:
- gopts, argsleft = getopt.getopt(args, 'onhs', ['space', 'new', 'old', 'help'])
+ gopts, argsleft = getopt.getopt(args, 'onhsk:', ['keep=','space',
+ 'new', 'old', 'help'])
except getopt.error, e:
- errorprint(_('Options Error: %s.') % e)
+ errorprint('Options Error: %s.' % e)
usage()
sys.exit(1)
@@ -171,6 +174,8 @@
options['passed'].append('new')
elif arg in ['-s', '--space']:
options['space'] = 1
+ elif arg in ['-k', '--keep']:
+ options['keep'] = int(a)
except ValueError, e:
@@ -190,19 +195,33 @@
directory = argsleft[0]
return options, directory
+
+def sortByEVR(evr1, evr2):
+ """sorts a list of evr tuples"""
+ rc = compareEVR(evr1, evr2)
+ if rc == 0:
+ return 0
+ if rc < 0:
+ return -1
+ if rc > 0:
+ return 1
+
+
def main(args):
options, mydir = parseargs(args)
rpmList = []
rpmList = getFileList(mydir, '.rpm', rpmList)
verfile = {}
- naver = {}
+ pkgdict = {} # hold all of them - put them in (n,a) = [(e,v,r),(e1,v1,r1)]
+
+ keepnum = options['keep']*(-1) # the number of items to keep
if len(rpmList) == 0:
errorprint('No files to process')
sys.exit(1)
-
+
ts = rpm.TransactionSet()
for pkg in rpmList:
try:
@@ -215,38 +234,46 @@
(n,a,e,v,r) = pkgtuple
del hdr
+ if not pkgdict.has_key((n,a)):
+ pkgdict[(n,a)] = []
+ pkgdict[(n,a)].append((e,v,r))
+
if not verfile.has_key(pkgtuple):
verfile[pkgtuple] = []
verfile[pkgtuple].append(pkg)
- if not naver.has_key((n,a)):
- naver[(n,a)] = (e,v,r)
- continue
-
- (e2, v2, r2) = naver[(n,a)] # the current champion
- rc = compareEVR((e,v,r), (e2,v2,r2))
- if rc == 0:
- continue
- if rc < 0:
- continue
- if rc > 0:
- naver[(n,a)] = (e,v,r)
-
+ for natup in pkgdict.keys():
+ evrlist = pkgdict[natup]
+ if len(evrlist) > 1:
+ evrlist.sort(sortByEVR)
+ pkgdict[natup] = evrlist
+
del ts
+
# now we have our dicts - we can return whatever by iterating over them
- # just print newests
outputpackages = []
if options['output'] == 'new':
-
- for (n,a) in naver.keys():
- (e,v,r) = naver[(n,a)]
- for pkg in verfile[(n,a,e,v,r)]:
- outputpackages.append(pkg)
+ for (n,a) in pkgdict.keys():
+
+
+ evrlist = pkgdict[(n,a)]
+ if len(evrlist) < abs(keepnum):
+ newevrs = evrlist
+ else:
+ newevrs = evrlist[keepnum:]
+ for (e,v,r) in newevrs:
+ for pkg in verfile[(n,a,e,v,r)]:
+ outputpackages.append(pkg)
if options['output'] == 'old':
- for (n,a,e,v,r) in verfile.keys():
- if (e,v,r) != naver[(n,a,)]:
+ for (n,a) in pkgdict.keys():
+ evrlist = pkgdict[(n,a)]
+ if len(evrlist) < abs(keepnum):
+ continue
+
+ oldevrs = evrlist[:keepnum]
+ for (e,v,r) in oldevrs:
for pkg in verfile[(n,a,e,v,r)]:
outputpackages.append(pkg)
@@ -264,6 +291,7 @@
-o --old - print the older packages
-n --new - print the newest packages
-s --space - space separated output, not newline
+ -k --keep - newest N packages to keep - defaults to 1
-h --help - duh
By default it will output the full path to the newest packages in the path.
"""
More information about the Yum-cvs-commits
mailing list