--- pkgset-install.c 16 Nov 2002 00:23:22 -0000 1.82 +++ pkgset-install.c 16 Jul 2003 10:55:04 -0000 1.82.4.1 @@ -224,11 +224,11 @@ if (p != pkg && pkg_is_marked(p)) { if (req == NULL || pkg_statisfies_req(p, req, 0)) { - DBGF("%s -> yes, %s\n", pkg_snprintf_s0(pkg), pkg_snprintf_s1(p)); - return 1; + DBGF("%s -> yes, %s\n", pkg_snprintf_s0(pkg), pkg_snprintf_s1(p)); + return 1; + } } } - } return 0; } @@ -303,7 +303,7 @@ struct pkg **candidates, int npkgs, struct pkgset *ps, struct upgrade_s *upg) { - int *ncnfls, i, j, i_min, cnfl_min; + int *ncnfls, i, j, i_best, cnfl_min; int i_ver_eq = -1, i_evr_eq = -1; DBGF("%s (%d)\n", pkg_snprintf_s(marker), npkgs); @@ -345,38 +345,44 @@ return i_ver_eq; cnfl_min = INT_MAX; - i_min = -1; + i_best = -1; for (i=0; i < npkgs; i++) { DBGF("%d. %s %d\n", i, pkg_snprintf_s(candidates[i]), ncnfls[i]); if (cnfl_min > ncnfls[i]) { cnfl_min = ncnfls[i]; - i_min = i; + i_best = i; } } - DBGF("[after cnfls] i_min = %d\n", i_min); + DBGF("[after cnfls] i_best = %d\n", i_best); if (cnfl_min == 0) { int n = INT_MAX, *nmarks; nmarks = alloca(npkgs * sizeof(*nmarks)); for (i=0; i < npkgs; i++) { + if (other_version_marked(candidates[i], ps->pkgs, NULL)) { + DBGF("%d. %s other version is already marked, skipped\n", + i, pkg_snprintf_s(candidates[i])); + continue; + } + nmarks[i] = pkg_drags(candidates[i], ps, upg); - DBGF("%d %s -> %d\n", i, pkg_snprintf_s(candidates[i]), nmarks[i]); - if (n > nmarks[i]) { + DBGF("%d. %s -> %d\n", i, pkg_snprintf_s(candidates[i]), nmarks[i]); + if (n > nmarks[i]) n = nmarks[i]; - } - + if (n == 0 && ncnfls[i] == 0) { - i_min = i; + i_best = i; break; } } } - if (i_min == -1) - i_min = 0; - return i_min; + if (i_best == -1) + i_best = 0; + DBGF("RET %d. %s\n", i_best, pkg_snprintf_s(candidates[i])); + return i_best; } #define FINDREQ_BESTSEL 0 @@ -1009,7 +1015,7 @@ capreq_snprintf(reqname, 256, req); } - DBGF("req %s\n", capreq_snprintf_s(req)); + DBGF("%s: REQ %s\n", pkg_snprintf_s(pkg), capreq_snprintf_s(req)); if ((upg->inst->flags & INSTS_EQPKG_ASKUSER) && upg->inst->askpkg_fn) tomark_candidates_ptr = &tomark_candidates; @@ -1022,7 +1028,8 @@ goto l_end_loop; } } - + DBGF("%s: TOMARK %s\n", pkg_snprintf_s1(pkg), + tomark ? pkg_snprintf_s0(tomark) : "NULL"); /* don't check foreign dependencies */ if (process_as == PROCESS_AS_ORPHAN) { #if 0 /* buggy, TODO - unmark foreign on adding to uninst_set */