aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPer Øyvind Karlsen <peroyvind@mandriva.org>2009-08-06 01:49:16 +0000
committerPer Øyvind Karlsen <peroyvind@mandriva.org>2009-08-06 01:49:16 +0000
commit0eef8b901ac136b9cb681f6219f29bd8c197453a (patch)
tree129e8cdd087c5051d67077066fc231d97220db0f
parent37cc9dd95810e07ac78cd8a14221e0541fe742d7 (diff)
downloadperl-URPM-0eef8b901ac136b9cb681f6219f29bd8c197453a.tar
perl-URPM-0eef8b901ac136b9cb681f6219f29bd8c197453a.tar.gz
perl-URPM-0eef8b901ac136b9cb681f6219f29bd8c197453a.tar.bz2
perl-URPM-0eef8b901ac136b9cb681f6219f29bd8c197453a.tar.xz
perl-URPM-0eef8b901ac136b9cb681f6219f29bd8c197453a.zip
"fix" rpmvercmp behaviour with rpm5 (fixing rpm.org remains)
-rw-r--r--URPM.xs37
-rw-r--r--t/parse.t5
2 files changed, 35 insertions, 7 deletions
diff --git a/URPM.xs b/URPM.xs
index e5b0971..72325f0 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -294,6 +294,26 @@ get_nvra(Header h) {
}
static int
+do_rpmEVRcmp(const char *a, const char *b) {
+ int compare;
+#ifdef RPM_ORG
+ /* TODO: implement EVR_t & friends locally? */
+ compare = rpmvercmp(a, b);
+#else
+ EVR_t lEVR,
+ rEVR;
+ lEVR = rpmEVRnew(RPMSENSE_EQUAL, 0),
+ rEVR = rpmEVRnew(RPMSENSE_EQUAL, 0);
+ rpmEVRparse(a, lEVR);
+ rpmEVRparse(b, rEVR);
+ compare = rpmEVRcompare(lEVR, rEVR);
+ lEVR = rpmEVRfree(lEVR),
+ rEVR = rpmEVRfree(rEVR);
+#endif
+ return compare;
+}
+
+static int
sigsize_to_filesize(int sigsize) {
return sigsize + 440; /* 440 is the rpm header size (?) empirical, but works */
}
@@ -1885,7 +1905,7 @@ Pkg_compare_pkg(lpkg, rpkg)
croak("undefined package");
}
- compare = rpmvercmp(levr, revr);
+ compare = do_rpmEVRcmp(levr, revr);
if (!compare) {
int lscore, rscore;
get_fullname_parts(lpkg, NULL, NULL, NULL, NULL, NULL, &larch, NULL);
@@ -1938,7 +1958,7 @@ Pkg_compare(pkg, evr)
if((tmp = strrchr(_evr, *seps)) != NULL && strrchr(evr, *seps) == NULL)
backup_char(tmp);
- compare = rpmvercmp(_evr, evr);
+ compare = do_rpmEVRcmp(_evr, evr);
/* restore provides string modified */
restore_chars();
}
@@ -3341,9 +3361,16 @@ Urpm_list_rpm_tag(urpm=Nullsv)
int
rpmvercmp(one, two)
- char *one
- char *two
-
+ char *one
+ char *two
+ PREINIT:
+ int compare;
+ CODE:
+ compare = do_rpmEVRcmp(one, two);
+ RETVAL = compare;
+ OUTPUT:
+ RETVAL
+
int
Urpm_ranges_overlap(a, b, b_nopromote=1)
char *a
diff --git a/t/parse.t b/t/parse.t
index cc9d3ba..178fee2 100644
--- a/t/parse.t
+++ b/t/parse.t
@@ -4,7 +4,7 @@
use strict;
use warnings;
-use Test::More tests => 39;
+use Test::More tests => 40;
use MDV::Packdrakeng;
use URPM;
use URPM::Build;
@@ -82,10 +82,11 @@ is("$start $end", "2 2", 'parse_headers');
# Version comparison
ok(URPM::rpmvercmp("1-1mdk", "1-1mdk") == 0, "Same value = 0");
-ok(URPM::rpmvercmp("0:1-1mdk", "1-1mdk") == -1, "Same value, epoch 0 on left = 1");
+ok(URPM::rpmvercmp("0:1-1mdk", "1-1mdk") == 0, "Same value, epoch 0 on left = 0");
ok(URPM::rpmvercmp("1-1mdk", "1-2mdk") == -1, "Right value win = -1");
ok(URPM::rpmvercmp("1-2mdk", "1-1mdk") == 1, "Left value win = 1");
ok(URPM::rpmvercmp("1:1-1mdk", "2:1-1mdk") == -1, "epoch 1 vs 2 = -1");
+ok(URPM::rpmvercmp("1.1-5.0", "1.1.1-1") == -1, "Right value win = -1");
{
open(my $hdfh, "zcat hdlist.cz 2>/dev/null |") or die $!;