[yum-git] yum-groups-manager.py
James Antill
james at linux.duke.edu
Fri Aug 22 00:06:31 UTC 2008
yum-groups-manager.py | 60 +++++++++++++++++++++++++++++++++++---------------
1 file changed, 43 insertions(+), 17 deletions(-)
New commits:
commit 711315273b8983f1ca13c52d29c02276c73e168a
Author: James Antill <james at and.org>
Date: Thu Aug 21 19:04:15 2008 -0400
Allow yum-groups-manager to remove packages and rename. Also some tweaks
diff --git a/yum-groups-manager.py b/yum-groups-manager.py
index ae0fb94..f1369fa 100755
--- a/yum-groups-manager.py
+++ b/yum-groups-manager.py
@@ -44,6 +44,9 @@ def setup_opts():
action="store_true", default=None,
help="print the result to stdout")
+ parser.add_option("--remove", action="store_true", default=False,
+ help="remove the listed package instead of adding them")
+
parser.add_option("--translated-name", action="append",
dest="i18nname",
help="name for the group, translated")
@@ -102,7 +105,7 @@ def req2pkgs(yb, req):
providers = matches.keys()
# provider.extend(yum.YumBase.returnPackagesByDep(self, depstring))
except yum.Errors.YumBaseError, err:
- print >>sys.stderr, "No package provides %s" % req
+ yb.logger.error("No package provides %s" % req)
return []
__req2pkgs[req] = providers
@@ -180,30 +183,46 @@ def main():
if opts.merge:
opts.load.insert(0, opts.merge)
+ loaded_files = False
for fname in opts.load:
if not os.path.exists(fname):
- print >>sys.stderr, "File not found:", fname
+ yb.logger.error("File not found: %s" % fname)
continue
- print 'Loading %s' % fname
if fname.endswith('.gz'):
fname = gzip.open(cf)
comps.add(srcfile=fname)
+ loaded_files = True
- group = yum.comps.Group()
- if opts.name:
- group.name = opts.name
+ if not loaded_files and opts.remove:
+ yb.logger.error("Can't remove package(s) when we havn't loaded any")
+ sys.exit(50)
+ group = None
if opts.id:
- group.groupid = opts.id
- elif group.name:
- group.groupid = group.name.lower()
- alnum = string.ascii_lowercase + string.digits
- group.groupid = re.sub('[^' + alnum + '-_.:]', '',
- group.groupid)
- else:
- yb.logger.error("No name or id for group")
+ group = comps.return_group(opts.id)
+ if group is None and opts.name:
+ group = comps.return_group(opts.name)
+ if group is None and opts.remove:
+ yb.logger.error("Can't remove package(s) from non-existant group")
sys.exit(50)
+ if group is None:
+ group = yum.comps.Group()
+
+ if opts.id:
+ group.groupid = opts.id
+ elif opts.name:
+ group.groupid = opts.name.lower()
+ alnum = string.ascii_lowercase + string.digits
+ group.groupid = re.sub('[^' + alnum + '-_.:]', '',
+ group.groupid)
+ else:
+ yb.logger.error("No name or id for group")
+ sys.exit(50)
+ comps.add_group(group)
+
+ if opts.name:
+ group.name = opts.name
if opts.description:
group.description = opts.description
if opts.display_order:
@@ -215,7 +234,12 @@ def main():
lang, text = trans_data(yb, td)
group.translated_description[lang] = text
- pkgs = yb.pkgSack.returnNewestByName(patterns=sys.argv[1:])
+ try:
+ pkgs = yb.pkgSack.returnNewestByName(patterns=args)
+ except yum.packageSack.PackageSackError, e:
+ yb.logger.error(e)
+ sys.exit(50)
+
pkgnames = set([pkg.name for pkg in pkgs])
if opts.dependencies:
@@ -227,7 +251,10 @@ def main():
pkgnames.update([pkg.name for pkg in req2pkgs(yb, rname)])
for pkgname in pkgnames:
- if False: pass
+ if opts.remove:
+ group.mandatory_packages.pop(pkgname, 0)
+ group.optional_packages.pop(pkgname, 0)
+ group.default_packages.pop(pkgname, 0)
elif opts.mandatory:
group.mandatory_packages[pkgname] = 1
elif opts.optional:
@@ -235,7 +262,6 @@ def main():
else:
group.default_packages[pkgname] = 1
- comps.add_group(group)
if opts.save:
fo = open(opts.save, "wb")
fo.write(comps.xml())
More information about the Yum-cvs-commits
mailing list