Merge branch 'issue_3421_apt_pkg_iU' into devel

This commit is contained in:
James Cammarata 2013-09-16 06:54:05 -05:00
commit d6b7c91aa9

View file

@ -136,6 +136,13 @@ APTITUDE_ZERO = "0 packages upgraded, 0 newly installed, 0 to remove and 0 not u
APT_LISTS_PATH = "/var/lib/apt/lists" APT_LISTS_PATH = "/var/lib/apt/lists"
APT_UPDATE_SUCCESS_STAMP_PATH = "/var/lib/apt/periodic/update-success-stamp" APT_UPDATE_SUCCESS_STAMP_PATH = "/var/lib/apt/periodic/update-success-stamp"
HAS_PYTHON_APT = True
try:
import apt
import apt_pkg
except:
HAS_PYTHON_APT = False
def package_split(pkgspec): def package_split(pkgspec):
parts = pkgspec.split('=') parts = pkgspec.split('=')
if len(parts) > 1: if len(parts) > 1:
@ -145,7 +152,12 @@ def package_split(pkgspec):
def package_status(m, pkgname, version, cache, state): def package_status(m, pkgname, version, cache, state):
try: try:
# get the package from the cache, as well as the
# the low-level apt_pkg.Package object which contains
# state fields not directly acccesible from the
# higher-level apt.package.Package object.
pkg = cache[pkgname] pkg = cache[pkgname]
ll_pkg = cache._cache[pkgname] # the low-level package object
except KeyError: except KeyError:
if state == 'install': if state == 'install':
m.fail_json(msg="No package matching '%s' is available" % pkgname) m.fail_json(msg="No package matching '%s' is available" % pkgname)
@ -158,16 +170,18 @@ def package_status(m, pkgname, version, cache, state):
if version: if version:
try : try :
return pkg.is_installed and fnmatch.fnmatch(pkg.installed.version, version), False, has_files return ll_pkg.current_state == apt_pkg.CURSTATE_INSTALLED and \
fnmatch.fnmatch(pkg.installed.version, version), False, has_files
except AttributeError: except AttributeError:
#assume older version of python-apt is installed #assume older version of python-apt is installed
return pkg.isInstalled and fnmatch.fnmatch(pkg.installedVersion, version), False, has_files return ll_pkg.current_state == apt_pkg.CURSTATE_INSTALLED and \
fnmatch.fnmatch(pkg.installedVersion, version), False, has_files
else: else:
try : try :
return pkg.is_installed, pkg.is_upgradable, has_files return ll_pkg.current_state == apt_pkg.CURSTATE_INSTALLED, pkg.is_upgradable, has_files
except AttributeError: except AttributeError:
#assume older version of python-apt is installed #assume older version of python-apt is installed
return pkg.isInstalled, pkg.isUpgradable, has_files return ll_pkg.current_state == apt_pkg.CURSTATE_INSTALLED, pkg.isUpgradable, has_files
def expand_pkgspec_from_fnmatches(m, pkgspec, cache): def expand_pkgspec_from_fnmatches(m, pkgspec, cache):
new_pkgspec = [] new_pkgspec = []
@ -308,10 +322,7 @@ def main():
supports_check_mode = True supports_check_mode = True
) )
try: if not HAS_PYTHON_APT:
import apt
import apt_pkg
except:
module.fail_json(msg="Could not import python modules: apt, apt_pkg. Please install python-apt package.") module.fail_json(msg="Could not import python modules: apt, apt_pkg. Please install python-apt package.")
global APTITUDE_CMD global APTITUDE_CMD