This is an automated email from the git hooks/post-receive script. guillem pushed a commit to branch main in repository dpkg.
View the commit online: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=92a76ec4b0f0eee65b353619b9d7ef25f14956f1 commit 92a76ec4b0f0eee65b353619b9d7ef25f14956f1 Author: Guillem Jover <[email protected]> AuthorDate: Thu Sep 11 23:36:58 2025 +0200 dselect: Use Dpkg::Version in method scripts instead of calling dpkg Do not call «dpkg --compare-versions», when we can use a pure Perl implementation. Changelog: internal --- dselect/methods/ftp/install.pl | 25 ++++++++----------------- dselect/methods/media/install.sh | 6 +++--- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/dselect/methods/ftp/install.pl b/dselect/methods/ftp/install.pl index a4260c410..0d9ced216 100755 --- a/dselect/methods/ftp/install.pl +++ b/dselect/methods/ftp/install.pl @@ -27,6 +27,7 @@ eval q{ use Data::Dumper; use Dpkg::File; + use Dpkg::Version; }; if ($@) { warn "Missing Dpkg modules required by the FTP access method.\n\n"; @@ -132,19 +133,6 @@ sub procstatus { } procstatus(); -sub dcmpvers { - my($a, $p, $b) = @_; - my ($r); - $r = system('dpkg', '--compare-versions', "$a", "$p", "$b"); - $r = $r/256; - if ($r == 0) { - return 1; - } elsif ($r == 1) { - return 0; - } - die "dpkg --compare-versions $a $p $b - failed with $r"; -} - # process package files, looking for packages to install # create a hash of these packages pkgname => version, filenames... # filename => md5sum, size @@ -164,7 +152,8 @@ sub procpkgfile { @files = split(/[\s\n]+/, $flds{'filename'}); @sizes = split(/[\s\n]+/, $flds{'size'}); @md5sums = split(/[\s\n]+/, $flds{'md5sum'}); - if (defined($ver) && (($ver eq '') || dcmpvers($ver, 'lt', $flds{'version'}))) { + if (defined($ver) && + (($ver eq '') || version_compare($ver, $flds{'version'}) < 0)) { $pkgs{$pkg} = [ $flds{'version'}, [ @files ], $site ]; $curpkgs{$pkg} = $flds{'version'}; } @@ -493,9 +482,10 @@ sub prcdeb { return 0; } if($vers{$pkg}) { - if (dcmpvers($vers{$pkg}, 'eq', $ver)) { + my $ver_rel = version_compare($vers{$pkg}, $ver); + if ($ver_rel == 0) { $files{$pkg . $ver} = [ $files{$pkg . $ver }, "$dir/$fn" ]; - } elsif (dcmpvers($vers{$pkg}, 'gt', $ver)) { + } elsif ($ver_rel > 0) { print "old version\n"; unlink $fn; } else { # else $ver is gt current version @@ -587,7 +577,8 @@ sub removeinstalled { my($pkg, $ver) = getdebinfo($fn); if(!defined($pkg) || !defined($ver)) { print "Could not get info for: $dir/$fn\n"; - } elsif ($curpkgs{$pkg} and dcmpvers($ver, 'le', $curpkgs{$pkg})) { + } elsif ($curpkgs{$pkg} && + version_compare($ver, $curpkgs{$pkg}) <= 0) { print "deleting: $dir/$fn\n"; unlink $fn; } else { diff --git a/dselect/methods/media/install.sh b/dselect/methods/media/install.sh index 9efc9ec66..01b039468 100755 --- a/dselect/methods/media/install.sh +++ b/dselect/methods/media/install.sh @@ -154,7 +154,7 @@ and rerun the installation, or upgrade the package by using ' -- "$p_mountpoint$p_hierbase" "$predep" "$thisdisk" done -perl -MDselect::Method::Media -e ' +perl -MDpkg::Version -MDselect::Method::Media -e ' $SIG{INT} = sub { cd $vardir; unlink <tmp/*>; exit 1; }; $| = 1; my ($vardir, $mountpoint, $hierbase, $mount, $umount) = @ARGV; @@ -196,8 +196,8 @@ perl -MDselect::Method::Media -e ' next unless defined $Installed{$avail{Package}}; - system "dpkg", "--compare-versions", $avail{Version}, "gt", $Installed{$avail{Package}}; - $updated = ($? == 0); + $updated = version_compare($avail{Version}, + $Installed{$avail{Package}}) > 0; #print "$avail{Package}(" . ($updated ? "+" : "=") . ") "; $updated or next; -- Dpkg.Org's dpkg

