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;
17 @@ -710,22 +708,10 @@ int i3_process_pkg_requirements(int indent, struct i3ctx *ictx,
20 tracef(indent, "%s as NEW", pkg_id(pkg));
22 - if (ts->getop(ts, POLDEK_OP_SUGGESTS)) {
23 - suggests = with_suggests(indent + 2, ictx, pkg);
25 - itflags |= PKG_ITER_REQSUG;
28 it = pkg_req_iter_new(pkg, itflags);
29 while ((req = pkg_req_iter_get(it))) {
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))
38 if ((rc = process_req(indent, ictx, i3pkg, req)) <= 0) {
40 @@ -738,7 +724,33 @@ int i3_process_pkg_requirements(int indent, struct i3ctx *ictx,
43 pkg_req_iter_free(it);
44 - n_array_cfree(&suggests);
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;
52 + suggests = with_suggests(indent + 2, ictx, pkg);
55 + for (i = 0; i < n_array_size(suggests); i++) {
58 + req = n_array_nth(suggests, i);
60 + if ((rc = process_req(indent, ictx, i3pkg, req)) <= 0) {
64 + if (i3pkg->flags & I3PKG_BACKTRACKABLE)
70 + n_array_cfree(&suggests);
73 if (backtrack && (i3pkg->flags & I3PKG_CROSSROAD)) {
74 logn(LOGNOTICE, "Retrying to process %s", pkg_id(i3pkg->pkg));