revisor/base.py | 43 ++-----------------
revisor/misc.py | 90 ++++++++++++++++++++++++++++++++++++++++-
revisor/pkgorder.py | 4 -
scripts/find-default-groups.py | 2
scripts/repoclosure.py | 4 -
5 files changed, 99 insertions(+), 44 deletions(-)
New commits:
commit 3620539408a58623d2c4bca609ed67e4dde2392c
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Fri Dec 12 16:30:16 2008 +0100
Use the renamed resolve_dependencies_inclusive function
diff --git a/revisor/pkgorder.py b/revisor/pkgorder.py
index da3d5b9..05611de 100644
--- a/revisor/pkgorder.py
+++ b/revisor/pkgorder.py
@@ -83,7 +83,7 @@ class PackageOrderer(yum.YumBase):
self.resolveDeps()
else:
print "%r" % self.resolved_deps
- (self.resolved_deps, self.final_pkgobjs) =
revisor.misc.resolve_dependencies_ugly(self.cfg.yumobj, self.cfg.log)
+ (self.resolved_deps, self.final_pkgobjs) =
revisor.misc.resolve_dependencies_inclusive(self.cfg.yumobj, self.cfg.log)
self.processTransaction()
@@ -100,7 +100,7 @@ class PackageOrderer(yum.YumBase):
if self.cfg.pkgorder_style == "yum":
self.resolveDeps()
else:
- (self.resolved_deps, self.final_pkgobjs) =
revisor.misc.resolve_dependencies_ugly(self.cfg.yumobj, self.cfg.log,
resolved_deps=self.resolved_deps, final_pkgobjs=self.final_pkgobjs)
+ (self.resolved_deps, self.final_pkgobjs) =
revisor.misc.resolve_dependencies_inclusive(self.cfg.yumobj, self.cfg.log,
resolved_deps=self.resolved_deps, final_pkgobjs=self.final_pkgobjs)
self.processTransaction()
diff --git a/scripts/find-default-groups.py b/scripts/find-default-groups.py
index 941b79b..f478dc0 100755
--- a/scripts/find-default-groups.py
+++ b/scripts/find-default-groups.py
@@ -87,7 +87,7 @@ class Yum(yum.YumBase):
if self.cli_options.depsolve_exclusive:
self.resolveDeps()
else:
- (self.resolved_deps,self.final_pkgobjs) =
revisor.misc.resolve_dependencies_ugly(self, resolved_deps=self.resolved_deps,
final_pkgobjs=self.final_pkgobjs)
+ (self.resolved_deps,self.final_pkgobjs) =
revisor.misc.resolve_dependencies_inclusive(self, resolved_deps=self.resolved_deps,
final_pkgobjs=self.final_pkgobjs)
def size_me(val):
ret_val = float(val)
diff --git a/scripts/repoclosure.py b/scripts/repoclosure.py
index 33d6933..9e6afee 100644
--- a/scripts/repoclosure.py
+++ b/scripts/repoclosure.py
@@ -45,13 +45,13 @@ class Yum(yum.YumBase):
self.tsInfo.addInstall(po)
except yum.Errors.PackageSackError, e:
pass
-
+
def resolve_dependencies(self):
return
#if self.cli_options.depsolve_exclusive:
#self.resolveDeps()
#else:
- #(self.resolved_deps,self.final_pkgobjs) =
revisor.misc.resolve_dependencies_ugly(self, resolved_deps=self.resolved_deps,
final_pkgobjs=self.final_pkgobjs)
+ #(self.resolved_deps,self.final_pkgobjs) =
revisor.misc.resolve_dependencies_inclusive(self, resolved_deps=self.resolved_deps,
final_pkgobjs=self.final_pkgobjs)
def exec_transaction(self, callback=None):
if not callback:
commit b2e4e62cc7857f3ac32931d89d3b5247d3766d60
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Fri Dec 12 16:29:35 2008 +0100
Use the new revisor.misc.return_pkg_tuple() function
Use the renamed resolve_dependencies_inclusive function
diff --git a/revisor/base.py b/revisor/base.py
index 2c11ddb..6c7e0fb 100644
--- a/revisor/base.py
+++ b/revisor/base.py
@@ -96,7 +96,7 @@ class RevisorBase:
self.cfg.setup_yum()
self.cfg.setup_ks()
-
+
def run(self):
"""Split into either running CLI, Server, Hub or GUI"""
if self.cfg.cli_mode:
@@ -564,43 +564,10 @@ class RevisorBase:
if
self.cfg.ksobj._get("packages","handleMissing") !=
kickstart.constants.KS_MISSING_IGNORE:
warnings.append(e.value)
# Here's where we try and see if this is a rpm -qa list
- elif re.match('.*-.*-.*\..*', pkg):
- # This format can have two forms:
- # name-ver-release.arch
- # name-ver-release
-
- # The first thing we need to get is the name and ver.
- # This is relatively easy
- (name, ver, relarch) = pkg.rsplit('-', 2)
-
- # For the latter part however (release.arch or release)...
- try:
- # Try splitting rel.disttag.arch
- (rel, dist, arch) = relarch.rsplit('.', 2)
- except ValueError:
- # Failed... :/
- # So, is this rel.arch? or rel.disttag?
-
- # Let's try and split on .
- # If it errors, we only have the release
- # If it's OK, we either have rel, arch, or rel, disttag
-
- try:
- (foo, bar) = relarch.split('.', 2)
- # Now that we've split, see if bar is an arch or a
disttag
- if rpmUtils.arch.arches.has_key(bar):
- arch = bar
- else:
- arch = None
- # If we didn't find a valid architecture, then
- # bar is part of the release (e.g. disttag)
- rel = "%s.%s" % (foo, bar)
-
- except ValueError:
- # Apparently our string only holds the release
- rel = relarch
+ elif re.match('.*-.*-.*', pkg):
+ (name, epoch, ver, rel, arch) = revisor.misc.return_pkg_tuple(pkg)
- pkgs = self.cfg.yumobj.pkgSack.searchNevra(name=name, ver=ver,
rel=rel, arch=arch)
+ pkgs = self.cfg.yumobj.pkgSack.searchNevra(name=name, epoch=epoch,
ver=ver, rel=rel, arch=arch)
if len(pkgs) > 1:
warnings.append(_("More then one package found for
%s-%s-%s.%s - going to add them all to the transaction") % (name,ver,rel,arch))
elif len(pkgs) < 1:
@@ -878,7 +845,7 @@ class RevisorBase:
# Hook in modrebrand to replace fedora-logos
self.cfg.plugins.exec_hook("pre_resolve_dependencies")
- revisor.misc.resolve_dependencies_ugly(self.cfg.yumobj, logger=self.log,
pbar=pbar)
+ revisor.misc.resolve_dependencies_inclusive(self.cfg.yumobj, logger=self.log,
pbar=pbar)
# Hook in modrebrand to replace fedora-logos
self.cfg.plugins.exec_hook("post_resolve_dependencies")
commit 481acf340bd9a341c3ea91fce8715fa7f5b5149c
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Fri Dec 12 16:28:28 2008 +0100
Rename resolve_dependencies_ugly to resolve_dependencies_inclusive
Add return_pkg_tuple which parses a string and returns a (n, e, v, r, a) tuple
diff --git a/revisor/misc.py b/revisor/misc.py
index f2b7045..38b9834 100644
--- a/revisor/misc.py
+++ b/revisor/misc.py
@@ -19,7 +19,9 @@
import logging
import os
+import re
import revisor
+import rpmUtils.arch
import socket
import sys
import urlgrabber
@@ -145,7 +147,7 @@ def resolve_pkgs(yumobj, package_list, log=None):
return final_package_list
-def resolve_dependencies_ugly(yumobj, logger=None, pbar=None, resolved_deps={},
final_pkgobjs={}):
+def resolve_dependencies_inclusive(yumobj, logger=None, pbar=None, resolved_deps={},
final_pkgobjs={}):
def get_package_deps(po, logger=None):
"""Add the dependencies for a given package to the
transaction info"""
@@ -213,6 +215,12 @@ def resolve_dependencies_ugly(yumobj, logger=None, pbar=None,
resolved_deps={},
#yumobj.tsInfo.makelists()
def get_repourls(yumobj):
+ """
+ From a yum object, extract the repository URLs for repositories
+ that are enabled.
+
+ Returns a tuple of lists, baseurls and mirrorlists
+ """
repository_baseurls = []
repository_mirrorlists = []
for repo in yumobj.repos.listEnabled():
@@ -244,7 +252,87 @@ def get_repourls(yumobj):
return (repository_baseurls,repository_mirrorlists)
+def return_pkg_tuple(pkg):
+ """
+ Given a package name (string), resolve the following forms to a package tuple:
+ - name-version-release.disttag.arch
+ - name-version-release.disttag
+ - name-version-release.arch
+ - name-version-release
+
+ Returns a (name, epoch, version, release, arch) tuple
+ """
+
+ name = None
+ epoch = None
+ version = None
+ release = None
+ arch = None
+
+ # We only accept strings
+ if not isinstance(pkg, str):
+ return
+
+ print "Input: %s" % pkg
+
+ # First of all, the package must match the following regexp:
+ # FIXME: Tweak this regexp
+ if re.match('.*-.*-.*', pkg):
+
+ # The first thing we need to get is the name and ver.
+ # This is relatively easy
+ (name, version, reldistarch) = pkg.rsplit('-', 2)
+
+ # version can still hold the epoch, as can name
+ try:
+ (epoch, version) = version.split(':', 1)
+ except ValueError:
+ try:
+ (epoch, name) = name.split(':', 1)
+ except ValueError:
+ epoch = None
+
+
+ # Now, for the reldistarch part,
+ try:
+ # Try splitting rel.disttag.arch
+ (rel, dist, arch) = reldistarch.rsplit('.', 2)
+ if rpmUtils.arch.arches.has_key(arch) or arch == "noarch":
+ # We have a winner!
+ release = "%s.%s" % (rel, dist)
+ else:
+ # Apparently there's a dot in the release :/
+ release = reldistarch
+ arch = None
+
+ except ValueError:
+ # Failed, so..., is this rel.arch? or rel.disttag?
+ # Let's try and split on .
+ # If it errors, we only have the release
+ # If it's OK, we either have rel, arch, or rel, disttag
+
+ try:
+ (foo, bar) = reldistarch.rsplit('.', 2)
+ # Now that we've split, see if bar is an arch or a disttag
+ if rpmUtils.arch.arches.has_key(bar) or arch == "noarch":
+ arch = bar
+ else:
+ arch = None
+ # If we didn't find a valid architecture, then
+ # bar is part of the release (e.g. disttag)
+ release = "%s.%s" % (foo, bar)
+
+ except ValueError:
+ # Apparently our string only holds the release
+ release = reldistarch
+
+ return (name, epoch, version, release, arch)
+
def size_me(val):
+ """
+ Given a value, convert it to a humanly readible format
+ Returns a tuple of (quantity, unit), e.g. (0, "KB")
+ """
ret_val = int(val)
units = [ "B", "kB", "MB", "GB",
"TB" ]
while ret_val > 1024: