summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlav Vitters <ovitters@mageia.org>2012-03-19 08:33:32 +0000
committerOlav Vitters <ovitters@mageia.org>2012-03-19 08:33:32 +0000
commit0f2a2534e5991c5ecaf34689da6b9b2b340a60d7 (patch)
treec6472a8dbaa829c2aa12fc515c451ddbd8f99873
parent8488169b91d7621d29795c7e06469cfb8fa1d92d (diff)
downloadmgagnome-0f2a2534e5991c5ecaf34689da6b9b2b340a60d7.tar
mgagnome-0f2a2534e5991c5ecaf34689da6b9b2b340a60d7.tar.gz
mgagnome-0f2a2534e5991c5ecaf34689da6b9b2b340a60d7.tar.bz2
mgagnome-0f2a2534e5991c5ecaf34689da6b9b2b340a60d7.tar.xz
mgagnome-0f2a2534e5991c5ecaf34689da6b9b2b340a60d7.zip
determine downstream name in case of multiple possibilities
-rwxr-xr-xmgagnome38
1 files changed, 34 insertions, 4 deletions
diff --git a/mgagnome b/mgagnome
index 5e27868..8fcbc01 100755
--- a/mgagnome
+++ b/mgagnome
@@ -526,11 +526,41 @@ def get_downstream_from_upstream(upstream, version):
if upstream not in downstream:
raise ValueError("No packages for upstream name: %s" % upstream)
- if len(downstream[upstream]) != 1:
- # XXX - Make it more intelligent
- raise ValueError("Multiple packages found for %s: %s" % (upstream, ", ".join(downstream[upstream].keys())))
+ if len(downstream[upstream]) == 1:
+ return downstream[upstream].keys()
- return downstream[upstream].keys()
+ # Directories packages are located in
+ root = os.path.expanduser(PKGROOT)
+
+ packages = {}
+ for package in downstream[upstream].keys():
+ cwd = os.path.join(root, package)
+
+ # Checkout package to ensure the checkout reflects the latest changes
+ try:
+ subprocess.check_call(['mgarepo', 'co', package], cwd=root)
+ except subprocess.CalledProcessError:
+ raise ValueError("Multiple packages found and cannot checkout %s" % package)
+
+ # Determine version from spec file
+ try:
+ packages[package] = SpecFile(os.path.join(cwd, "SPECS", "%s.spec" % package)).version
+ except subprocess.CalledProcessError:
+ raise ValueError("Multiple packages found and cannot determine version of %s" % package)
+
+ # Return all packages reflecting the current version
+ matches = [package for package in packages if packages[package] == version]
+ if len(matches):
+ return matches
+
+ # Return all packages reflecting the version before the current version
+ latest_version = get_latest_version(packages.values(), max_version=version)
+ matches = [package for package in packages if packages[package] == latest_version]
+ if len(matches):
+ return matches
+
+ # Give up
+ raise ValueError("Multiple packages found and cannot determine package for version %s" % version)
def write_file(path, data):
with tempfile.NamedTemporaryFile(dir=os.path.dirname(path), delete=False) as fdst: