]> git.pld-linux.org Git - packages/poldek.git/commitdiff
- fix for lp#305588
authorMarcin Banasiak <marcin.banasiak@gmail.com>
Sun, 7 Dec 2008 16:41:31 +0000 (16:41 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    poldek-dont-suggests-required-packages.patch -> 1.1

poldek-dont-suggests-required-packages.patch [new file with mode: 0644]

diff --git a/poldek-dont-suggests-required-packages.patch b/poldek-dont-suggests-required-packages.patch
new file mode 100644 (file)
index 0000000..2b4b9a3
--- /dev/null
@@ -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));
This page took 0.035736 seconds and 4 git commands to generate.