From d2dd23de3c1e592cf14b46f2242a91a27080d25f34f318a67c9eeecd9a0916c6 Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Thu, 24 Feb 2011 07:47:46 +0000 Subject: [PATCH 1/2] Updating link to change in openSUSE:Factory/rpm revision 125.0 OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=998fb30c277beaa02b8f35a8306ab05f --- rpm-python.spec | 2 +- rpm.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rpm-python.spec b/rpm-python.spec index 6d10974..a8cf732 100644 --- a/rpm-python.spec +++ b/rpm-python.spec @@ -26,7 +26,7 @@ License: GPLv2+ Group: System/Packages Summary: Python Bindings for Manipulating RPM Packages Version: 4.8.0 -Release: 19 +Release: 20 Requires: rpm = %{version} %py_requires Source99: rpm.spec diff --git a/rpm.spec b/rpm.spec index 895e77f..30d0457 100644 --- a/rpm.spec +++ b/rpm.spec @@ -29,7 +29,7 @@ PreReq: %insserv_prereq %fillup_prereq permissions AutoReqProv: on Summary: The RPM Package Manager Version: 4.8.0 -Release: 30 +Release: 31 Source: rpm-%{version}.tar.bz2 Source1: RPM-HOWTO.tar.bz2 Source2: RPM-Tips.html.tar.bz2 From 58033489830580f22cce91c5868aff56b363d2d12b450cdd9b1d4bc3b257be83 Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Wed, 4 May 2011 22:04:44 +0000 Subject: [PATCH 2/2] Accepting request 69563 from home:michal-m:branches:Base:System - rpmsort + Fix comparison function to match rpm (bnc#644515, thanks to Michael Schroeder). + Add --test option to verify result against zypper vcmp. OBS-URL: https://build.opensuse.org/request/show/69563 OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=91 --- rpm.changes | 8 ++++++++ rpmsort | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/rpm.changes b/rpm.changes index 45a71a9..7f29467 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Wed May 4 12:42:33 UTC 2011 - mmarek@novell.com + +- rpmsort + + Fix comparison function to match rpm (bnc#644515, thanks to + Michael Schroeder). + + Add --test option to verify result against zypper vcmp. + ------------------------------------------------------------------- Sat Feb 19 12:39:31 CET 2011 - vuntz@opensuse.org diff --git a/rpmsort b/rpmsort index a73478b..841c2d7 100644 --- a/rpmsort +++ b/rpmsort @@ -17,7 +17,7 @@ use Getopt::Long qw(:config gnu_getopt); -sub rpm_cmp_versions { +sub do_rpm_cmp_versions { my ($evr1, $evr2) = @_; sub _rpm_cmp { @@ -31,8 +31,10 @@ sub rpm_cmp_versions { $s1 =~ s/^[^a-zA-Z0-9]+//; $s2 =~ s/^[^a-zA-Z0-9]+//; if ($s1 =~ /^\d/ || $s2 =~ /^\d/) { - $s1 =~ s/^0*(\d*)//; $x1 = $1; - $s2 =~ s/^0*(\d*)//; $x2 = $1; + $s1 =~ s/^(0*(\d*))//; $x1 = $2; + return -1 if $1 eq ''; + $s2 =~ s/^(0*(\d*))//; $x2 = $2; + return 1 if $1 eq ''; $r = length $x1 <=> length $x2 || $x1 cmp $x2; } else { $s1 =~ s/^([a-zA-Z]*)//; $x1 = $1; @@ -57,11 +59,35 @@ sub rpm_cmp_versions { my $reorder = sub { return @_ }; my $key = 0; +my $test = 0; + +sub rpm_cmp_versions { + my ($evr1, $evr2) = @_; + + chomp($evr1, $evr2); + my $res1 = do_rpm_cmp_versions($evr1, $evr2); + if ($test) { + open(my $fd, '-|', 'zypper', '--terse', 'versioncmp', + $evr1, $evr2) or die "zypper: $!\n"; + my $res2 = <$fd>; + close($fd) or die "zypper: $!\n"; + chomp $res2; + if ($res1 != $res2) { + my @operators = qw(< == >); + my $op1 = $operators[$res1 + 1]; + my $op2 = $operators[$res2 + 1]; + + print STDERR "BUG: $evr1 $op1 $evr2 vs. zypper: $evr1 $op2 $evr2\n"; + } + } + return $res1; +} GetOptions ("r|reverse" => sub { $reorder = sub { return reverse @_ } }, - "k|key=i" => \$key) + "k|key=i" => \$key, + "test" => \$test) or do { - print STDERR "Usage\n"; + print STDERR "Usage $0 [-r, --reverse] [-k N, --key=N] [--test]\n"; exit 1; };