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