1 diff -urN a/install3/misc.c b/install3/misc.c
2 --- a/install3/misc.c 2009-11-22 01:39:59.000000000 +0100
3 +++ b/install3/misc.c 2009-11-22 01:35:25.795536883 +0100
5 for (i=0; i < n_array_size(candidates); i++) {
6 struct pkg *cand = n_array_nth(candidates, i);
8 - if (pkg_is_colored_like(cand, marker)) {
9 + if (!pkg_isset_mf(ictx->processed, cand, PKGMARK_BLACK) && pkg_is_colored_like(cand, marker)) {
11 tmp = n_array_clone(candidates);
14 struct pkg **best_pkg, tn_array *candidates)
16 tn_array *suspkgs = NULL, *tmpkgs;
21 found = pkgset_find_match_packages(ictx->ps, pkg, req, &suspkgs, 1);//ictx->strict);
24 //trace(indent, "after removed rmmarked -> %d package(s)",
25 // n_array_size(suspkgs));
27 + /* remove marked as BLACK from suspected packages, they have broken deps */
28 + for (i = 0; i < n_array_size(suspkgs); i++) {
29 + struct pkg *suspkg = n_array_nth(suspkgs, i);
31 + if (pkg_isset_mf(ictx->processed, suspkg, PKGMARK_BLACK)) {
32 + trace(indent, "- marked as BLACK %s", pkg_id(suspkg));
33 + n_array_remove_nth(suspkgs, i--);
37 if (n_array_size(suspkgs) == 0) {
39 diff -urN a/install3/process.c b/install3/process.c
40 --- a/install3/process.c 2009-11-22 01:39:38.000000000 +0100
41 +++ b/install3/process.c 2009-11-22 19:41:42.862076125 +0100
43 i3_forget_error(ictx, pkg);
47 + /* this package may be used again and we have to process it (do not
48 + * stop on the first condition in i3_process_package()) to generate
49 + * new ->obsoletedby as we removed them here. */
50 + pkg_clr_mf(ictx->processed, i3pkg->pkg, PKGMARK_GRAY);
52 if (i3pkg->markedby) {
53 indent = inc_indent(indent);