1 Index: pkgset-install.c
2 ===================================================================
3 RCS file: /cvsroot/installer/poldek/pkgset-install.c,v
4 retrieving revision 1.149
5 diff -u -r1.149 pkgset-install.c
6 --- pkgset-install.c 3 Nov 2005 00:21:00 -0000 1.149
7 +++ pkgset-install.c 21 Nov 2005 20:42:04 -0000
9 static int marked_for_removal(struct pkg *pkg, struct upgrade_s *upg);
12 +#define mark_package(a, b) do_mark_package(a, b, PKGMARK_MARK);
14 +static int do_mark_package(struct pkg *pkg, struct upgrade_s *upg,
19 /* anyone of pkgs is marked? */
20 static inline int one_is_marked(struct pkgmark_set *pms, struct pkg *pkgs[],
27 +struct pkg *installset_obsoletes(const struct pkg *pkg, struct pkgset *ps,
28 + struct upgrade_s *upg)
33 + pkgs = pkgset_search(ps, PS_SEARCH_OBSL, pkg->name);
34 + DBGF("%s => found %d packages\n", pkg->name, pkgs ? n_array_size(pkgs) : 0);
38 + for (i=0; i<n_array_size(pkgs); i++) {
39 + struct pkg *pkg = n_array_nth(pkgs, i);
41 + if (pkg_is_marked_i(upg->ts->pms, pkg))
42 + mark_package(pkg, upg);
44 + if (pkg_is_marked(upg->ts->pms, pkg))
51 /* looks into Obsoletes only */
54 struct pkg *bypkg = NULL;
58 - if ((pkgs = pkgset_search(ps, PS_SEARCH_CAP, pkg->name)) == NULL)
60 + pkgs = pkgset_search(ps, PS_SEARCH_CAP, pkg->name);
62 + DBGF("%s => found 0 packages\n");
67 best_i = select_best_pkg(pkg, pkgs, ps, upg);
68 + DBGF("%s => found %d packages, best=%d\n", pkg->name, n_array_size(pkgs),
71 for (i=best_i; i < n_array_size(pkgs); i++) {
72 struct pkg *p = n_array_nth(pkgs, i);
75 if (strcmp(pkg->name, p->name) == 0)
85 int other_version_marked(struct pkgmark_set *pms, struct pkg *pkg,
86 tn_array *pkgs, struct capreq *req)
91 -#define mark_package(a, b) do_mark_package(a, b, PKGMARK_MARK);
93 static int do_mark_package(struct pkg *pkg, struct upgrade_s *upg,
96 @@ -1146,8 +1184,11 @@
97 p = select_pkg(pkg->name, ps->pkgs, upg);
98 if ((p == NULL || pkg_cmp_evr(p, pkg) == 0) &&
99 upg->ts->getop(upg->ts, POLDEK_OP_OBSOLETES)) {
100 - p = select_supersede_pkg(pkg, ps, upg);
102 + if ((p = installset_obsoletes(pkg, ps, upg)) == NULL)
103 + p = select_supersede_pkg(pkg, ps, upg);