From 78d816cb76857c24db49b2b012300b77ceb7503a Mon Sep 17 00:00:00 2001 From: Marcin Banasiak Date: Sun, 7 Dec 2008 16:41:31 +0000 Subject: [PATCH] - fix for lp#305588 Changed files: poldek-dont-suggests-required-packages.patch -> 1.1 --- poldek-dont-suggests-required-packages.patch | 74 ++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 poldek-dont-suggests-required-packages.patch diff --git a/poldek-dont-suggests-required-packages.patch b/poldek-dont-suggests-required-packages.patch new file mode 100644 index 0000000..2b4b9a3 --- /dev/null +++ b/poldek-dont-suggests-required-packages.patch @@ -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)); -- 2.44.0