diff --git a/src/python/jw/pkg/cmds/distro/CmdInstall.py b/src/python/jw/pkg/cmds/distro/CmdInstall.py index 7ec9039c..286e77f0 100644 --- a/src/python/jw/pkg/cmds/distro/CmdInstall.py +++ b/src/python/jw/pkg/cmds/distro/CmdInstall.py @@ -13,6 +13,7 @@ class CmdInstall(Cmd): # export def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) parser.add_argument("packages", nargs="*", help="Packages to be installed") + parser.add_argument('--only-update', default=False, action='store_true', help='Only update the listed packages, don\'t install them') async def _run(self, args: Namespace) -> None: return await self._backend.run(args) diff --git a/src/python/jw/pkg/cmds/distro/backend/arch/Install.py b/src/python/jw/pkg/cmds/distro/backend/arch/Install.py index b621fdd1..c309aa31 100644 --- a/src/python/jw/pkg/cmds/distro/backend/arch/Install.py +++ b/src/python/jw/pkg/cmds/distro/backend/arch/Install.py @@ -11,6 +11,8 @@ class Install(Base): super().__init__(parent) async def run(self, args: Namespace): + if args.only_update: + raise NotImplementedError('--only-update is not yet implemented for pacman') pacman_args = ['-S', '--needed'] pacman_args.extend(args.packages) await self.util.pacman(*pacman_args) diff --git a/src/python/jw/pkg/cmds/distro/backend/debian/Install.py b/src/python/jw/pkg/cmds/distro/backend/debian/Install.py index ffcbce9a..a7d4615a 100644 --- a/src/python/jw/pkg/cmds/distro/backend/debian/Install.py +++ b/src/python/jw/pkg/cmds/distro/backend/debian/Install.py @@ -11,4 +11,9 @@ class Install(Base): super().__init__(parent) async def run(self, args: Namespace): - return await self.util.apt_get('install', *args.packages) + apt_get_args = ['install'] + if args.only_update: + apt_get_args.append('--only-upgrade') + apt_get_args.append('--no-install-recommends') + apt_get_args.extend(args.packages) + return await self.apt_get(apt_get_args) diff --git a/src/python/jw/pkg/cmds/distro/backend/redhat/Install.py b/src/python/jw/pkg/cmds/distro/backend/redhat/Install.py index e6e291f3..74375db5 100644 --- a/src/python/jw/pkg/cmds/distro/backend/redhat/Install.py +++ b/src/python/jw/pkg/cmds/distro/backend/redhat/Install.py @@ -11,7 +11,7 @@ class Install(Base): super().__init__(parent) async def run(self, args: Namespace): - yum_args = ['install'] + yum_args = ['update' if args.only_update else 'install'] if not self.interactive: yum_args.append['-y'] yum_args.extend(args.packages) diff --git a/src/python/jw/pkg/cmds/distro/backend/suse/Install.py b/src/python/jw/pkg/cmds/distro/backend/suse/Install.py index 665657b0..ad4e70af 100644 --- a/src/python/jw/pkg/cmds/distro/backend/suse/Install.py +++ b/src/python/jw/pkg/cmds/distro/backend/suse/Install.py @@ -11,4 +11,5 @@ class Install(Base): super().__init__(parent) async def run(self, args: Namespace): - return await self.util.zypper(['install', *args.packages]) + zypper_cmd = 'update' if args.only_update else 'install' + return await self.util.zypper([zypper_cmd, *args.packages])