diff options
author | Francois Pons <fpons@mandriva.com> | 2002-06-06 15:44:27 +0000 |
---|---|---|
committer | Francois Pons <fpons@mandriva.com> | 2002-06-06 15:44:27 +0000 |
commit | a3d672d23de228cb2955f5825869154b77a7f5e0 (patch) | |
tree | 9c516f2848644d9f33e388a315ce5042844cad19 /URPM.xs | |
parent | 507d79f646464f20a758ca8a41a3638c8ac4fc83 (diff) | |
download | perl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.tar perl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.tar.gz perl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.tar.bz2 perl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.tar.xz perl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.zip |
0.03-2mdk
Diffstat (limited to 'URPM.xs')
-rw-r--r-- | URPM.xs | 41 |
1 files changed, 33 insertions, 8 deletions
@@ -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: |