aboutsummaryrefslogtreecommitdiffstats
path: root/URPM.xs
diff options
context:
space:
mode:
authorFrancois Pons <fpons@mandriva.com>2002-06-06 15:44:27 +0000
committerFrancois Pons <fpons@mandriva.com>2002-06-06 15:44:27 +0000
commita3d672d23de228cb2955f5825869154b77a7f5e0 (patch)
tree9c516f2848644d9f33e388a315ce5042844cad19 /URPM.xs
parent507d79f646464f20a758ca8a41a3638c8ac4fc83 (diff)
downloadperl-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.xs41
1 files changed, 33 insertions, 8 deletions
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: