]> git.pld-linux.org Git - packages/poldek.git/blob - poldek-dont-suggests-required-packages.patch
This commit was manufactured by cvs2git to create branch 'AC-DEVEL'.
[packages/poldek.git] / poldek-dont-suggests-required-packages.patch
1 diff --git a/install3/requirements.c b/install3/requirements.c
2 index 406b37e..0b5a654 100644
3 --- a/install3/requirements.c
4 +++ b/install3/requirements.c
5 @@ -696,11 +696,9 @@ int i3_process_pkg_requirements(int indent, struct i3ctx *ictx,
6      struct pkg          *pkg = i3pkg->pkg;
7      struct pkg_req_iter *it = NULL;
8      const struct capreq *req = NULL;
9 -    tn_array            *suggests = NULL;
10      unsigned            itflags = PKG_ITER_REQIN;
11      int                 nerrors = 0, backtrack = 0;
12      
13 -    
14      pkg = i3pkg->pkg;
15      n_assert(pkg);
16      n_assert(pkg->reqs);
17 @@ -710,22 +708,10 @@ int i3_process_pkg_requirements(int indent, struct i3ctx *ictx,
18          return 0;
19      
20      tracef(indent, "%s as NEW", pkg_id(pkg));
21 -
22 -    if (ts->getop(ts, POLDEK_OP_SUGGESTS)) {
23 -        suggests = with_suggests(indent + 2, ictx, pkg);
24 -        if (suggests)
25 -            itflags |= PKG_ITER_REQSUG;
26 -    }
27      
28      it = pkg_req_iter_new(pkg, itflags);
29      while ((req = pkg_req_iter_get(it))) {
30 -        unsigned t;
31          int rc;
32 -
33 -        /* install only reasonable/choosen suggests */
34 -        t = pkg_req_iter_current_req_type(it);
35 -        if (t == PKG_ITER_REQSUG && !suggests_contains(suggests, req))
36 -            continue;
37          
38          if ((rc = process_req(indent, ictx, i3pkg, req)) <= 0) {
39              nerrors++;
40 @@ -738,7 +724,33 @@ int i3_process_pkg_requirements(int indent, struct i3ctx *ictx,
41      }
42  
43      pkg_req_iter_free(it);
44 -    n_array_cfree(&suggests);
45 +    
46 +    /* check for Suggests after processing Requires. Prevent cases where poldek
47 +       asks for suggested package, even though it is required. */
48 +    if (ts->getop(ts, POLDEK_OP_SUGGESTS) && nerrors == 0) {
49 +        tn_array *suggests = NULL;
50 +       int      i;
51 +       
52 +       suggests = with_suggests(indent + 2, ictx, pkg);
53 +       
54 +       if (suggests) {
55 +           for (i = 0; i < n_array_size(suggests); i++) {
56 +               int rc;
57 +               
58 +               req = n_array_nth(suggests, i);
59 +               
60 +               if ((rc = process_req(indent, ictx, i3pkg, req)) <= 0) {
61 +                   nerrors++;
62 +                   if (rc < 0) {
63 +                       backtrack = 1;
64 +                       if (i3pkg->flags & I3PKG_BACKTRACKABLE)
65 +                           break;
66 +                   }
67 +               }
68 +           }
69 +       }
70 +       n_array_cfree(&suggests);
71 +    }
72      
73      if (backtrack && (i3pkg->flags & I3PKG_CROSSROAD)) {
74          logn(LOGNOTICE, "Retrying to process %s", pkg_id(i3pkg->pkg));
This page took 0.048388 seconds and 3 git commands to generate.