From bc9fb43ac0da1da0e9c787979af2484ca40bfff4 Mon Sep 17 00:00:00 2001 From: Roland Sommer Date: Fri, 19 Feb 2016 09:52:53 +0100 Subject: [PATCH 1/2] add 'only_upgrade' switch to apt module --- packaging/os/apt.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packaging/os/apt.py b/packaging/os/apt.py index cfaec0505d3..e0c5f02f457 100755 --- a/packaging/os/apt.py +++ b/packaging/os/apt.py @@ -102,6 +102,13 @@ options: choices: [ "yes", "no" ] aliases: [ 'autoclean'] version_added: "2.1" + only_upgrade: + description: + - Only install/upgrade a package it it is already installed. + required: false + default: false + version_added: "2.1" + requirements: [ python-apt, aptitude ] author: "Matthew Williams (@mgwilliams)" notes: @@ -355,7 +362,7 @@ def expand_pkgspec_from_fnmatches(m, pkgspec, cache): def install(m, pkgspec, cache, upgrade=False, default_release=None, install_recommends=None, force=False, dpkg_options=expand_dpkg_options(DPKG_OPTIONS), - build_dep=False, autoremove=False): + build_dep=False, autoremove=False, only_upgrade=False): pkg_list = [] packages = "" pkgspec = expand_pkgspec_from_fnmatches(m, pkgspec, cache) @@ -394,10 +401,15 @@ def install(m, pkgspec, cache, upgrade=False, default_release=None, else: autoremove = '' + if only_upgrade: + only_upgrade = '--only-upgrade' + else: + only_upgrade = '' + if build_dep: cmd = "%s -y %s %s %s build-dep %s" % (APT_GET_CMD, dpkg_options, force_yes, check_arg, packages) else: - cmd = "%s -y %s %s %s %s install %s" % (APT_GET_CMD, dpkg_options, force_yes, autoremove, check_arg, packages) + cmd = "%s -y %s %s %s %s %s install %s" % (APT_GET_CMD, dpkg_options, only_upgrade, force_yes, autoremove, check_arg, packages) if default_release: cmd += " -t '%s'" % (default_release,) @@ -570,7 +582,8 @@ def main(): force = dict(default='no', type='bool'), upgrade = dict(choices=['no', 'yes', 'safe', 'full', 'dist']), dpkg_options = dict(default=DPKG_OPTIONS), - autoremove = dict(type='bool', default=False, aliases=['autoclean']) + autoremove = dict(type='bool', default=False, aliases=['autoclean']), + only_upgrade = dict(type='bool', default=False) ), mutually_exclusive = [['package', 'upgrade', 'deb']], required_one_of = [['package', 'upgrade', 'update_cache', 'deb']], @@ -692,7 +705,8 @@ def main(): default_release=p['default_release'], install_recommends=install_recommends, force=force_yes, dpkg_options=dpkg_options, - build_dep=state_builddep, autoremove=autoremove) + build_dep=state_builddep, autoremove=autoremove, + only_upgrade=p['only_upgrade']) (success, retvals) = result retvals['cache_updated']=updated_cache retvals['cache_update_time']=updated_cache_time From b118c5ef115ef575ec8a9fef00cfc7376db6a6dc Mon Sep 17 00:00:00 2001 From: Roland Sommer Date: Thu, 17 Mar 2016 11:22:07 +0100 Subject: [PATCH 2/2] honour 'only_upgrade' flag for 'build_dep' case in 'apt' module --- packaging/os/apt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/os/apt.py b/packaging/os/apt.py index e0c5f02f457..974a0f5b899 100755 --- a/packaging/os/apt.py +++ b/packaging/os/apt.py @@ -407,7 +407,7 @@ def install(m, pkgspec, cache, upgrade=False, default_release=None, only_upgrade = '' if build_dep: - cmd = "%s -y %s %s %s build-dep %s" % (APT_GET_CMD, dpkg_options, force_yes, check_arg, packages) + cmd = "%s -y %s %s %s %s build-dep %s" % (APT_GET_CMD, dpkg_options, only_upgrade, force_yes, check_arg, packages) else: cmd = "%s -y %s %s %s %s %s install %s" % (APT_GET_CMD, dpkg_options, only_upgrade, force_yes, autoremove, check_arg, packages)