From a3d672d23de228cb2955f5825869154b77a7f5e0 Mon Sep 17 00:00:00 2001 From: Francois Pons Date: Thu, 6 Jun 2002 15:44:27 +0000 Subject: 0.03-2mdk --- URPM.xs | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) (limited to 'URPM.xs') diff --git a/URPM.xs b/URPM.xs index bbbebb9..fcaee43 100644 --- a/URPM.xs +++ b/URPM.xs @@ -677,6 +677,8 @@ Pkg_is_arch_compat(pkg) } else { RETVAL = 0; } + OUTPUT: + RETVAL void Pkg_summary(pkg) @@ -769,10 +771,12 @@ Pkg_compare_pkg(lpkg, rpkg) int lepoch; char *lversion; char *lrelease; + char *larch; char *leos; int repoch; char *rversion; char *rrelease; + char *rarch; char *reos; CODE: if (lpkg->info) { @@ -785,14 +789,15 @@ Pkg_compare_pkg(lpkg, rpkg) } else { lepoch = 0; } - get_fullname_parts(lpkg, NULL, &lversion, &lrelease, &leos, NULL); + get_fullname_parts(lpkg, NULL, &lversion, &lrelease, &larch, &leos); /* temporaly mark end of each substring */ lrelease[-1] = 0; - leos[-1] = 0; + larch[-1] = 0; } else if (lpkg->h) { lepoch = get_int(lpkg->h, RPMTAG_EPOCH); lversion = get_name(lpkg->h, RPMTAG_VERSION); lrelease = get_name(lpkg->h, RPMTAG_RELEASE); + larch = headerIsEntry(lpkg->h, RPMTAG_SOURCEPACKAGE) ? "src" : get_name(lpkg->h, RPMTAG_ARCH); } else croak("undefined package"); if (rpkg->info) { char *s; @@ -804,36 +809,56 @@ Pkg_compare_pkg(lpkg, rpkg) } else { repoch = 0; } - get_fullname_parts(rpkg, NULL, &rversion, &rrelease, &reos, NULL); + get_fullname_parts(rpkg, NULL, &rversion, &rrelease, &rarch, &reos); /* temporaly mark end of each substring */ rrelease[-1] = 0; - reos[-1] = 0; + rarch[-1] = 0; } else if (rpkg->h) { repoch = get_int(rpkg->h, RPMTAG_EPOCH); rversion = get_name(rpkg->h, RPMTAG_VERSION); rrelease = get_name(rpkg->h, RPMTAG_RELEASE); + rarch = headerIsEntry(rpkg->h, RPMTAG_SOURCEPACKAGE) ? "src" : get_name(rpkg->h, RPMTAG_ARCH); } else { /* restore info string modified */ if (lpkg->info) { lrelease[-1] = '-'; - leos[-1] = '.'; + larch[-1] = '.'; } croak("undefined package"); } compare = lepoch - repoch; if (!compare) { compare = rpmvercmp(lversion, rversion); - if (!compare) + if (!compare) { compare = rpmvercmp(lrelease, rrelease); + if (!compare) { + int lscore, rscore; + + read_config_files(); + lscore = rpmMachineScore(RPM_MACHTABLE_INSTARCH, larch); + rscore = rpmMachineScore(RPM_MACHTABLE_INSTARCH, rarch); + if (lscore == 0) { + if (rscore == 0) + compare = strcmp(larch, rarch); + else + compare = -1; + } else { + if (rscore == 0) + compare = 1; + else + compare = rscore - lscore; /* score are lower for better */ + } + } + } } /* restore info string modified */ if (lpkg->info) { lrelease[-1] = '-'; - leos[-1] = '.'; + larch[-1] = '.'; } if (rpkg->info) { rrelease[-1] = '-'; - reos[-1] = '.'; + rarch[-1] = '.'; } RETVAL = compare; OUTPUT: -- cgit v1.2.1