From 0eef8b901ac136b9cb681f6219f29bd8c197453a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=98yvind=20Karlsen?= Date: Thu, 6 Aug 2009 01:49:16 +0000 Subject: "fix" rpmvercmp behaviour with rpm5 (fixing rpm.org remains) --- URPM.xs | 37 ++++++++++++++++++++++++++++++++----- t/parse.t | 5 +++-- 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 @@ -293,6 +293,26 @@ get_nvra(Header h) { return NVRA; } +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 $!; -- cgit v1.2.1