poldek: poldek/install/conflicts.c, poldek/install/install.c - bug...
mis
mis at pld-linux.org
Tue Jun 19 16:11:22 CEST 2007
Author: mis Date: Tue Jun 19 14:11:22 2007 GMT
Module: poldek Tag: HEAD
---- Log message:
- bugfix: duplicate packages wasn't properly removed (fixes
"I libsmbclient-3.0.25a-1.x86_64, libsmbclient-3.0.25a-2.x86_64" case)
- multilib-aware resolve_conflict
---- Files affected:
poldek/poldek/install:
conflicts.c (1.4 -> 1.5) , install.c (1.7 -> 1.8)
---- Diffs:
================================================================
Index: poldek/poldek/install/conflicts.c
diff -u poldek/poldek/install/conflicts.c:1.4 poldek/poldek/install/conflicts.c:1.5
--- poldek/poldek/install/conflicts.c:1.4 Sun Jun 17 22:24:47 2007
+++ poldek/poldek/install/conflicts.c Tue Jun 19 16:11:17 2007
@@ -21,21 +21,27 @@
struct pkg **rpkg)
{
tn_array *pkgs;
- struct pkg *bypkg = NULL;
struct pkgset *ps;
-
+ int i;
+
ps = ictx->ts->ctx->ps;
*rpkg = NULL;
/* simply higest version */
- if ((bypkg = pkgset_lookup_1package(ps, pkg->name)) &&
- pkg_cmp_name_evr(bypkg, pkg) > 0) {
-
- *rpkg = bypkg;
-
- } else if ((pkgs = pkgset_search(ps, PS_SEARCH_OBSL, pkg->name))) {
- int i;
-
+ if ((pkgs = pkgset_search(ps, PS_SEARCH_NAME, pkg->name))) {
+ for (i=0; i < n_array_size(pkgs); i++) {
+ struct pkg *p = n_array_nth(pkgs, i);
+ if (!pkg_is_kind_of(p, pkg))
+ continue;
+
+ if (pkg_cmp_evr(p, pkg) > 0) {
+ *rpkg = p;
+ break;
+ }
+ }
+ }
+
+ if (*rpkg == NULL && (pkgs = pkgset_search(ps, PS_SEARCH_OBSL, pkg->name))) {
for (i=0; i < n_array_size(pkgs); i++) {
struct pkg *p = n_array_nth(pkgs, i);
if (pkg_caps_obsoletes_pkg_caps(p, pkg) &&
================================================================
Index: poldek/poldek/install/install.c
diff -u poldek/poldek/install/install.c:1.7 poldek/poldek/install/install.c:1.8
--- poldek/poldek/install/install.c:1.7 Mon Jun 18 18:12:43 2007
+++ poldek/poldek/install/install.c Tue Jun 19 16:11:17 2007
@@ -309,13 +309,22 @@
return rc;
}
+static int package_is_duplicate(const struct pkg *pkg, const struct pkg *pkg2)
+{
+ if (pkg_cmp_name(pkg, pkg2) != 0)
+ return 0;
+
+ if (poldek_conf_MULTILIB && pkg_cmp_arch(pkg, pkg2) != 0)
+ return 0;
+
+ return 1;
+}
static
-int unmark_name_dups(struct pkgmark_set *pms, tn_array *pkgs)
+int unmark_name_duplicates(struct pkgmark_set *pms, tn_array *pkgs)
{
struct pkg *pkg, *pkg2;
int i, n, nmarked = 0;
- int multilib = poldek_conf_MULTILIB; /* just for short */
if (n_array_size(pkgs) < 2)
return n_array_size(pkgs);
@@ -337,13 +346,10 @@
break;
pkg2 = n_array_nth(pkgs, i);
- while (pkg_cmp_name(pkg, pkg2) == 0) {
- if (!multilib || (multilib && pkg_cmp_arch(pkg, pkg2) == 0)) {
- pkg_unmark(pms, pkg2);
- DBGF("unmark %s\n", pkg_id(pkg2));
- n++;
- }
-
+ while (package_is_duplicate(pkg, pkg2)) {
+ pkg_unmark(pms, pkg2);
+ DBGF(" unmark %s\n", pkg_id(pkg2));
+ n++;
i++;
if (i == n_array_size(pkgs))
break;
@@ -363,7 +369,7 @@
if (in_prepare_icaps(ts) < 0) /* user aborts, no error */
return 1;
- if (unmark_name_dups(ts->pms, ts->ctx->ps->pkgs) == 0) {
+ if (unmark_name_duplicates(ts->pms, ts->ctx->ps->pkgs) == 0) {
msgn(1, _("Nothing to do"));
return 1;
}
================================================================
---- CVS-web:
http://cvs.pld-linux.org/poldek/poldek/install/conflicts.c?r1=1.4&r2=1.5&f=u
http://cvs.pld-linux.org/poldek/poldek/install/install.c?r1=1.7&r2=1.8&f=u
More information about the pld-cvs-commit
mailing list