diff --git a/src/python/jw/pkg/cmds/distro/CmdDup.py b/src/python/jw/pkg/cmds/distro/CmdDup.py index 561c5cf2..cd3935d0 100644 --- a/src/python/jw/pkg/cmds/distro/CmdDup.py +++ b/src/python/jw/pkg/cmds/distro/CmdDup.py @@ -12,6 +12,8 @@ class CmdDup(Cmd): # export def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) + parser.add_argument('--download-only', default=False, action='store_true', + help='Only download packages from the repos, don\'t install them, yet') async def _run(self, args: Namespace) -> None: return await self._backend.run(args) diff --git a/src/python/jw/pkg/cmds/distro/backend/arch/Dup.py b/src/python/jw/pkg/cmds/distro/backend/arch/Dup.py index 8fa66f2a..87ea8063 100644 --- a/src/python/jw/pkg/cmds/distro/backend/arch/Dup.py +++ b/src/python/jw/pkg/cmds/distro/backend/arch/Dup.py @@ -11,4 +11,7 @@ class Dup(Base): super().__init__(parent) async def run(self, args: Namespace): - raise NotImplementedError('distro dup is not yet implemented for Arch-like distributions') + pm_args = ['-Su'] + if args.download_only: + pm_args.append('-w') + return await self.util.pacman(pm_args) diff --git a/src/python/jw/pkg/cmds/distro/backend/debian/Dup.py b/src/python/jw/pkg/cmds/distro/backend/debian/Dup.py index 08fcb7a5..dfb9910e 100644 --- a/src/python/jw/pkg/cmds/distro/backend/debian/Dup.py +++ b/src/python/jw/pkg/cmds/distro/backend/debian/Dup.py @@ -11,4 +11,8 @@ class Dup(Base): super().__init__(parent) async def run(self, args: Namespace): - raise NotImplementedError('distro dup is not yet implemented for Debian-like distributions') + apt_get_args: list[str] = [] + if args.download_only: + apt_get_args.append('--download-only') + apt_get_args.append('upgrade') + return await self.apt_get(apt_get_args) diff --git a/src/python/jw/pkg/cmds/distro/backend/redhat/Dup.py b/src/python/jw/pkg/cmds/distro/backend/redhat/Dup.py index f100dcf3..17f499f5 100644 --- a/src/python/jw/pkg/cmds/distro/backend/redhat/Dup.py +++ b/src/python/jw/pkg/cmds/distro/backend/redhat/Dup.py @@ -11,4 +11,7 @@ class Dup(Base): super().__init__(parent) async def run(self, args: Namespace): - raise NotImplementedError('distro dup is not yet implemented for Red Hat-like distributions') + yum_args: list[str] = ['update'] + if args.download_only: + yum_args.append('--downloadonly') + return await self.yum(yum_args) diff --git a/src/python/jw/pkg/cmds/distro/backend/suse/Dup.py b/src/python/jw/pkg/cmds/distro/backend/suse/Dup.py index d8f26bfe..0e330f6a 100644 --- a/src/python/jw/pkg/cmds/distro/backend/suse/Dup.py +++ b/src/python/jw/pkg/cmds/distro/backend/suse/Dup.py @@ -11,4 +11,7 @@ class Dup(Base): super().__init__(parent) async def run(self, args: Namespace): - return await self.util.zypper(['dup', '--force-resolution', '--auto-agree-with-licenses']) + zypper_args = ['dup', '--force-resolution', '--auto-agree-with-licenses'] + if args.download_only: + zypper_args.append('--download-only') + return await self.util.zypper(zypper_args)