From 6fce4a9c3dac5704eeba2e17b4bf023f930542c2 Mon Sep 17 00:00:00 2001 From: fabios Date: Thu, 25 Dec 2014 14:14:01 -0500 Subject: [PATCH 1/4] handle list of list for python-apt < 0.7.9 compatibility --- packaging/os/apt.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packaging/os/apt.py b/packaging/os/apt.py index 43a7d6b390b..7eba3432e60 100644 --- a/packaging/os/apt.py +++ b/packaging/os/apt.py @@ -180,7 +180,8 @@ def package_versions(pkgname, pkg, pkg_cache): # assume older version of python-apt is installed # apt.package.Package#versions require python-apt >= 0.7.9. pkg_cache_list = (p for p in pkg_cache.Packages if p.Name == pkgname) - pkg_versions = (p.VersionList for p in pkg_cache_list) + pkg_list_of_lists = (p.VersionList for p in pkg_cache_list) + pkg_versions = (p for l in pkg_list_of_lists for p in l) versions = set(p.VerStr for p in pkg_versions) return versions From d19f7c702613b73154c40b40ebf6bdcd06745615 Mon Sep 17 00:00:00 2001 From: fabios Date: Sat, 27 Dec 2014 15:30:56 -0500 Subject: [PATCH 2/4] older python-apt compatibility --- packaging/os/apt.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packaging/os/apt.py b/packaging/os/apt.py index 7eba3432e60..d1101bc7b8b 100644 --- a/packaging/os/apt.py +++ b/packaging/os/apt.py @@ -202,8 +202,12 @@ def package_status(m, pkgname, version, cache, state): ll_pkg = cache._cache[pkgname] # the low-level package object except KeyError: if state == 'install': - if cache.get_providing_packages(pkgname): - return False, True, False + try: + if cache.get_providing_packages(pkgname): + return False, True, False + except AttributeError: + # older python-apt providing packages cannot be used + pass m.fail_json(msg="No package matching '%s' is available" % pkgname) else: return False, False, False From b747d9411ac346835c4a38dbe3997c72c0e78137 Mon Sep 17 00:00:00 2001 From: fabios Date: Sat, 27 Dec 2014 21:19:00 -0500 Subject: [PATCH 3/4] improve fail message and use itertools chain --- packaging/os/apt.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packaging/os/apt.py b/packaging/os/apt.py index d1101bc7b8b..77f1e431b2f 100644 --- a/packaging/os/apt.py +++ b/packaging/os/apt.py @@ -144,6 +144,7 @@ import os import datetime import fnmatch +import itertools # APT related constants APT_ENV_VARS = dict( @@ -180,9 +181,8 @@ def package_versions(pkgname, pkg, pkg_cache): # assume older version of python-apt is installed # apt.package.Package#versions require python-apt >= 0.7.9. pkg_cache_list = (p for p in pkg_cache.Packages if p.Name == pkgname) - pkg_list_of_lists = (p.VersionList for p in pkg_cache_list) - pkg_versions = (p for l in pkg_list_of_lists for p in l) - versions = set(p.VerStr for p in pkg_versions) + pkg_versions = (p.VersionList for p in pkg_cache_list) + versions = set(p.VerStr for p in itertools.chain(*pkg_versions)) return versions @@ -205,10 +205,10 @@ def package_status(m, pkgname, version, cache, state): try: if cache.get_providing_packages(pkgname): return False, True, False + m.fail_json(msg="No package matching '%s' is available" % pkgname) except AttributeError: - # older python-apt providing packages cannot be used - pass - m.fail_json(msg="No package matching '%s' is available" % pkgname) + # python-apt version too old to detect virtual packages + m.fail_json(msg="No package matching '%s' is available (python-apt version too old to detect virtual packages)" % pkgname) else: return False, False, False try: From 9ed842e2d0442112f3674dd4ab063e33d70c0254 Mon Sep 17 00:00:00 2001 From: fabios Date: Sun, 28 Dec 2014 12:52:48 -0500 Subject: [PATCH 4/4] mark as upgradable and let apt-get install deal with it --- packaging/os/apt.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packaging/os/apt.py b/packaging/os/apt.py index 77f1e431b2f..ad1807f9c20 100644 --- a/packaging/os/apt.py +++ b/packaging/os/apt.py @@ -208,7 +208,8 @@ def package_status(m, pkgname, version, cache, state): m.fail_json(msg="No package matching '%s' is available" % pkgname) except AttributeError: # python-apt version too old to detect virtual packages - m.fail_json(msg="No package matching '%s' is available (python-apt version too old to detect virtual packages)" % pkgname) + # mark as upgradable and let apt-get install deal with it + return False, True, False else: return False, False, False try: