2 ===================================================================
3 RCS file: /cvsroot/poldek/poldek/arg_packages.c,v
4 retrieving revision 1.24
5 retrieving revision 1.25
7 --- arg_packages.c 7 Jan 2006 01:13:20 -0000 1.24
8 +++ arg_packages.c 2 Apr 2006 19:10:36 -0000 1.25
13 +extern int poldek_conf_MULTILIB;
15 #define ARG_PACKAGES_SETUPDONE (1 << 0)
17 /* @VIRTUAL [DEFAULT_MASK [EVR]] */
19 // n_hash_size(aps->resolved_caps);
22 -#if 0 /* XXX: disabled, #5702 */
23 -/* tries to convert N-[E:]V-R to N#[E:]V-R */
24 -static char *mask2evrhashedmask(const char *mask)
26 - const char *name, *ver, *rel, *p;
27 - char nmask[1024], e[32] = "", *tmp;
31 - n_strdupap(mask, &tmp);
32 - if (!poldek_util_parse_nevr(tmp, &name, &epoch, &ver, &rel))
35 - p = ver; /* check if it is really version */
42 - if (*p == '\0') /* no digits => part of name propably */
46 - snprintf(e, sizeof(e), "%d:", epoch);
47 - n = n_snprintf(nmask, sizeof(nmask), "%s#%s%s-%s", name, e, ver, rel);
48 - return n_strdupl(nmask, n);
52 tn_array *arg_packages_get_masks(struct arg_packages *aps, int hashed)
57 masks = n_array_clone(aps->package_masks);
58 for (i=0; i < n_array_size(aps->package_masks); i++) {
61 - mask = n_array_nth(aps->package_masks, i);
62 - if (hashed && strchr(mask, '-') && strchr(mask, '*') == NULL) {
63 -#if 0 /* XXX: disabled so smart NEVR parsing, #5702 */
65 - if ((nmask = mask2evrhashedmask(mask)))
69 + const char *mask = n_array_nth(aps->package_masks, i);
70 n_array_push(masks, n_strdup(mask));
74 + hashed = 0; /* disabled for a while */
75 for (i=0; i < n_array_size(aps->packages); i++) {
76 struct pkg *pkg = n_array_nth(aps->packages, i);
77 char mask[1024], e[32] = "";
81 snprintf(e, sizeof(e), "%d:", pkg->epoch);
84 n = n_snprintf(mask, sizeof(mask), "%s%s%s%s-%s", pkg->name,
85 - hashed ? "#" : "-", e, pkg->ver, pkg->rel);
86 + hashed ? "#" : "-", e, pkg->ver, pkg->rel);
88 + if (0 && poldek_conf_MULTILIB && pkg_arch(pkg))
89 + n += n_snprintf(&mask[n], sizeof(mask) - n, ".%s", pkg_arch(pkg));
91 n_array_push(masks, n_strdupl(mask, n));
95 ===================================================================
96 RCS file: /cvsroot/poldek/poldek/uninstall.c,v
97 retrieving revision 1.39
98 retrieving revision 1.40
100 --- uninstall.c 18 Mar 2006 17:03:48 -0000 1.39
101 +++ uninstall.c 2 Apr 2006 19:10:36 -0000 1.40
104 DBGF("%s\n", pkg_id(pkg));
106 + msg_i(3, indent, "%s\n", pkg_id(pkg));
107 for (i=0; i < n_array_size(pkg->reqs); i++) {
108 struct capreq *req = n_array_nth(pkg->reqs, i);
112 DBGF("req %s\n", capreq_snprintf_s(req));
114 - if (pkg_satisfies_req(pkg, req, 1)) { /* self match, should be handled
115 + if (pkg_satisfies_req(pkg, req, 1)) { /* XXX: self match, should be handled
116 at lower level; TOFIX */
117 DBGF("%s: satisfied by itself\n", capreq_snprintf_s(req));
120 uctx->uninst_set->dbpkgs)) {
122 DBGF("%s: satisfied by db\n", capreq_snprintf_s(req));
123 - msg_i(3, indent, "%s: satisfied by db\n", capreq_snprintf_s(req));
124 + msg_i(3, indent, " %s: satisfied by db\n", capreq_snprintf_s(req));
126 } else if (!uctx->ts->getop(uctx->ts, POLDEK_OP_FOLLOW)) {
127 logn(LOGERR, _("%s (cap %s) is required by %s"),
131 int do_resolve_package(struct uninstall_ctx *uctx, struct poldek_ts *ts,
132 - const char *mask, const struct capreq *cr)
133 + const char *mask, const struct capreq *cr,
139 pkg_evr_match_req(dbpkg, cr, POLDEK_MA_PROMOTE_REQEPOCH))
143 + if (matched && arch) {
144 + const char *dbarch = pkg_arch(dbpkg);
145 + matched = n_str_eq(arch, dbarch ? dbarch : "none");
154 static int resolve_package(struct uninstall_ctx *uctx, struct poldek_ts *ts,
156 + const char *mask, const char *arch)
159 struct capreq *cr, *cr_evr;
164 - if (do_resolve_package(uctx, ts, mask, cr))
165 + if (do_resolve_package(uctx, ts, mask, cr, arch))
173 +static int resolve_mask(struct uninstall_ctx *uctx, struct poldek_ts *ts,
177 + const char *n, *v, *r;
182 + msgn(2, "Trying %s\n", mask);
183 + if (resolve_package(uctx, ts, mask, NULL))
186 + if ((p = strchr(mask, '-')) == NULL) /* try N-[E:]V */
189 + /* try N-[E:]V-R */
190 + n_strdupap(mask, &tmp);
191 + p = strrchr(tmp, '-');
194 + msgn(2, " Trying %s\n", tmp);
196 + if (resolve_package(uctx, ts, tmp, NULL))
199 + n_strdupap(mask, &tmp);
200 + if (poldek_util_parse_nevr(tmp, &n, &e, &v, &r)) {
202 + n_snprintf(nmask, sizeof(nmask), "%s#%d:%s-%s", n, e, v, r);
204 + n_snprintf(nmask, sizeof(nmask), "%s#%s-%s", n, v, r);
206 + msgn(2, " Trying %s\n", nmask);
207 + DBGF("try %s => %s (%s, %s, %s)\n", mask, nmask, n, v, r);
208 + matched = resolve_package(uctx, ts, nmask, NULL);
210 + if (!matched && (p = strchr(r, '.'))) { /* try N-[E:]-V-R.ARCH */
215 + n_snprintf(nmask, sizeof(nmask), "%s#%d:%s-%s", n, e, v, r);
217 + n_snprintf(nmask, sizeof(nmask), "%s#%s-%s", n, v, r);
218 + msgn(2, " Trying %s (arch=%s)\n", nmask, p);
219 + matched = resolve_package(uctx, ts, nmask, p);
226 static int resolve_packages(struct uninstall_ctx *uctx, struct poldek_ts *ts)
228 @@ -509,51 +569,11 @@
229 masks = poldek_ts_get_args_asmasks(ts, 1);
231 for (i=0; i < n_array_size(masks); i++) {
232 - char *mask = n_array_nth(masks, i);
235 - msgn(2, "Trying %s\n", mask);
236 - if (resolve_package(uctx, ts, mask)) {
242 - if ((p = strchr(mask, '-'))) { /* try N-[E:]V */
244 - n_strdupap(mask, &tmp);
246 - p = strrchr(tmp, '-');
248 + char *mask = n_array_nth(masks, i);
250 - msgn(2, " Trying %s\n", tmp);
252 - if (resolve_package(uctx, ts, tmp)) {
255 - } else { /* try N-[E:]V-R */
256 - const char *n, *v, *r;
260 - n_strdupap(mask, &tmp);
261 - if (poldek_util_parse_nevr(tmp, &n, &e, &v, &r)) {
263 - n_snprintf(nmask, sizeof(nmask), "%s#%d:%s-%s", n, e, v, r);
265 - n_snprintf(nmask, sizeof(nmask), "%s#%s-%s", n, v, r);
267 - msgn(2, " Trying %s\n", nmask);
268 - DBGF("try %s => %s (%s, %s, %s)\n", mask, nmask, n, v, r);
269 - matched = resolve_package(uctx, ts, nmask);
275 - logn(LOGERR, _("%s: no such package"), mask);
278 + if (!resolve_mask(uctx, ts, mask)) {
279 + logn(LOGERR, _("%s: no such package"), mask);