SOURCES: poldek-dont-suggests-required-packages.patch (NEW) - fix for lp#30...

megabajt megabajt at pld-linux.org
Sun Dec 7 17:41:37 CET 2008


Author: megabajt                     Date: Sun Dec  7 16:41:37 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- fix for lp#305588

---- Files affected:
SOURCES:
   poldek-dont-suggests-required-packages.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/poldek-dont-suggests-required-packages.patch
diff -u /dev/null SOURCES/poldek-dont-suggests-required-packages.patch:1.1
--- /dev/null	Sun Dec  7 17:41:37 2008
+++ SOURCES/poldek-dont-suggests-required-packages.patch	Sun Dec  7 17:41:31 2008
@@ -0,0 +1,74 @@
+diff --git a/install3/requirements.c b/install3/requirements.c
+index 406b37e..0b5a654 100644
+--- a/install3/requirements.c
++++ b/install3/requirements.c
+@@ -696,11 +696,9 @@ int i3_process_pkg_requirements(int indent, struct i3ctx *ictx,
+     struct pkg          *pkg = i3pkg->pkg;
+     struct pkg_req_iter *it = NULL;
+     const struct capreq *req = NULL;
+-    tn_array            *suggests = NULL;
+     unsigned            itflags = PKG_ITER_REQIN;
+     int                 nerrors = 0, backtrack = 0;
+     
+-    
+     pkg = i3pkg->pkg;
+     n_assert(pkg);
+     n_assert(pkg->reqs);
+@@ -710,22 +708,10 @@ int i3_process_pkg_requirements(int indent, struct i3ctx *ictx,
+         return 0;
+     
+     tracef(indent, "%s as NEW", pkg_id(pkg));
+-
+-    if (ts->getop(ts, POLDEK_OP_SUGGESTS)) {
+-        suggests = with_suggests(indent + 2, ictx, pkg);
+-        if (suggests)
+-            itflags |= PKG_ITER_REQSUG;
+-    }
+     
+     it = pkg_req_iter_new(pkg, itflags);
+     while ((req = pkg_req_iter_get(it))) {
+-        unsigned t;
+         int rc;
+-
+-        /* install only reasonable/choosen suggests */
+-        t = pkg_req_iter_current_req_type(it);
+-        if (t == PKG_ITER_REQSUG && !suggests_contains(suggests, req))
+-            continue;
+         
+         if ((rc = process_req(indent, ictx, i3pkg, req)) <= 0) {
+             nerrors++;
+@@ -738,7 +724,33 @@ int i3_process_pkg_requirements(int indent, struct i3ctx *ictx,
+     }
+ 
+     pkg_req_iter_free(it);
+-    n_array_cfree(&suggests);
++    
++    /* check for Suggests after processing Requires. Prevent cases where poldek
++       asks for suggested package, even though it is required. */
++    if (ts->getop(ts, POLDEK_OP_SUGGESTS) && nerrors == 0) {
++        tn_array *suggests = NULL;
++	int      i;
++	
++	suggests = with_suggests(indent + 2, ictx, pkg);
++	
++	if (suggests) {
++	    for (i = 0; i < n_array_size(suggests); i++) {
++		int rc;
++		
++		req = n_array_nth(suggests, i);
++		
++		if ((rc = process_req(indent, ictx, i3pkg, req)) <= 0) {
++        	    nerrors++;
++        	    if (rc < 0) {
++            		backtrack = 1;
++            		if (i3pkg->flags & I3PKG_BACKTRACKABLE)
++                	    break;
++        	    }
++    		}
++	    }
++	}
++	n_array_cfree(&suggests);
++    }
+     
+     if (backtrack && (i3pkg->flags & I3PKG_CROSSROAD)) {
+         logn(LOGNOTICE, "Retrying to process %s", pkg_id(i3pkg->pkg));
================================================================


More information about the pld-cvs-commit mailing list