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

Reply via email to