]> git.pld-linux.org Git - packages/poldek.git/blame - poldek-dont-suggests-required-packages.patch
- added -dont-lose-deps.patch
[packages/poldek.git] / poldek-dont-suggests-required-packages.patch
CommitLineData
78d816cb
MB
1diff --git a/install3/requirements.c b/install3/requirements.c
2index 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.061136 seconds and 4 git commands to generate.