]>
Commit | Line | Data |
---|---|---|
78d816cb MB |
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)); |