]> git.pld-linux.org Git - packages/poldek.git/blame - poldek-uninstall-multilib.patch
This commit was manufactured by cvs2git to create tag 'auto-ac-poldek-
[packages/poldek.git] / poldek-uninstall-multilib.patch
CommitLineData
ad591511 1Index: arg_packages.c
2===================================================================
3RCS file: /cvsroot/poldek/poldek/arg_packages.c,v
4retrieving revision 1.24
5retrieving revision 1.25
6diff -u -r1.24 -r1.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
9@@ -42,6 +42,8 @@
10 #include "pkgset.h"
11 #include "pm/pm.h"
12
13+extern int poldek_conf_MULTILIB;
14+
15 #define ARG_PACKAGES_SETUPDONE (1 << 0)
16
17 /* @VIRTUAL [DEFAULT_MASK [EVR]] */
18@@ -227,36 +229,6 @@
19 // n_hash_size(aps->resolved_caps);
20 }
21
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)
25-{
26- const char *name, *ver, *rel, *p;
27- char nmask[1024], e[32] = "", *tmp;
28- int32_t epoch = 0;
29- int n;
30-
31- n_strdupap(mask, &tmp);
32- if (!poldek_util_parse_nevr(tmp, &name, &epoch, &ver, &rel))
33- return NULL;
34-
35- p = ver; /* check if it is really version */
36- while (*p) {
37- if (isdigit(*p))
38- break;
39- p++;
40- }
41-
42- if (*p == '\0') /* no digits => part of name propably */
43- return NULL;
44-
45- if (epoch)
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);
49-}
50-#endif
51-
52 tn_array *arg_packages_get_masks(struct arg_packages *aps, int hashed)
53 {
54 tn_array *masks;
55@@ -264,19 +236,11 @@
56
57 masks = n_array_clone(aps->package_masks);
58 for (i=0; i < n_array_size(aps->package_masks); i++) {
59- const char *mask;
60-
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 */
64- char *nmask;
65- if ((nmask = mask2evrhashedmask(mask)))
66- mask = nmask;
67-#endif
68- }
69+ const char *mask = n_array_nth(aps->package_masks, i);
70 n_array_push(masks, n_strdup(mask));
71 }
72-
73+
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] = "";
78@@ -284,9 +248,13 @@
79
80 if (pkg->epoch)
81 snprintf(e, sizeof(e), "%d:", pkg->epoch);
82-
83+
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);
87+
88+ if (0 && poldek_conf_MULTILIB && pkg_arch(pkg))
89+ n += n_snprintf(&mask[n], sizeof(mask) - n, ".%s", pkg_arch(pkg));
90+
91 n_array_push(masks, n_strdupl(mask, n));
92 }
93
94Index: uninstall.c
95===================================================================
96RCS file: /cvsroot/poldek/poldek/uninstall.c,v
97retrieving revision 1.39
98retrieving revision 1.40
99diff -u -r1.39 -r1.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
102@@ -227,6 +227,7 @@
103 MEMINF("START");
104 DBGF("%s\n", pkg_id(pkg));
105
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);
109
110@@ -235,7 +236,7 @@
111
112 DBGF("req %s\n", capreq_snprintf_s(req));
113
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));
118
119@@ -243,7 +244,7 @@
120 uctx->uninst_set->dbpkgs)) {
121
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));
125
126 } else if (!uctx->ts->getop(uctx->ts, POLDEK_OP_FOLLOW)) {
127 logn(LOGERR, _("%s (cap %s) is required by %s"),
128@@ -402,7 +403,8 @@
129
130 static
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,
134+ const char *arch)
135 {
136 tn_array *dbpkgs;
137 int i, nmatches = 0;
138@@ -446,6 +448,12 @@
139 pkg_evr_match_req(dbpkg, cr, POLDEK_MA_PROMOTE_REQEPOCH))
140 matched = 1;
141 }
142+
143+ if (matched && arch) {
144+ const char *dbarch = pkg_arch(dbpkg);
145+ matched = n_str_eq(arch, dbarch ? dbarch : "none");
146+ }
147+
148 }
149
150 if (matched) {
151@@ -459,7 +467,7 @@
152 }
153
154 static int resolve_package(struct uninstall_ctx *uctx, struct poldek_ts *ts,
155- const char *mask)
156+ const char *mask, const char *arch)
157 {
158 char *p;
159 struct capreq *cr, *cr_evr;
160@@ -491,7 +499,7 @@
161 }
162 }
163
164- if (do_resolve_package(uctx, ts, mask, cr))
165+ if (do_resolve_package(uctx, ts, mask, cr, arch))
166 resolved = 1;
167
168 if (cr_evr)
169@@ -500,6 +508,58 @@
170 return resolved;
171 }
172
173+static int resolve_mask(struct uninstall_ctx *uctx, struct poldek_ts *ts,
174+ const char *mask)
175+{
176+ char *p, *tmp;
177+ const char *n, *v, *r;
178+ char nmask[256];
179+ int32_t e = 0;
180+ int matched = 0;
181+
182+ msgn(2, "Trying %s\n", mask);
183+ if (resolve_package(uctx, ts, mask, NULL))
184+ return 1;
185+
186+ if ((p = strchr(mask, '-')) == NULL) /* try N-[E:]V */
187+ return 0;
188+
189+ /* try N-[E:]V-R */
190+ n_strdupap(mask, &tmp);
191+ p = strrchr(tmp, '-');
192+ *p = '#';
193+
194+ msgn(2, " Trying %s\n", tmp);
195+
196+ if (resolve_package(uctx, ts, tmp, NULL))
197+ return 1;
198+
199+ n_strdupap(mask, &tmp);
200+ if (poldek_util_parse_nevr(tmp, &n, &e, &v, &r)) {
201+ if (e)
202+ n_snprintf(nmask, sizeof(nmask), "%s#%d:%s-%s", n, e, v, r);
203+ else
204+ n_snprintf(nmask, sizeof(nmask), "%s#%s-%s", n, v, r);
205+
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);
209+
210+ if (!matched && (p = strchr(r, '.'))) { /* try N-[E:]-V-R.ARCH */
211+ *p = '\0';
212+ p++;
213+
214+ if (e)
215+ n_snprintf(nmask, sizeof(nmask), "%s#%d:%s-%s", n, e, v, r);
216+ else
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);
220+ }
221+ }
222+
223+ return matched;
224+}
225
226 static int resolve_packages(struct uninstall_ctx *uctx, struct poldek_ts *ts)
227 {
228@@ -509,51 +569,11 @@
229 masks = poldek_ts_get_args_asmasks(ts, 1);
230
231 for (i=0; i < n_array_size(masks); i++) {
232- char *mask = n_array_nth(masks, i);
233- int matched = 0;
234-
235- msgn(2, "Trying %s\n", mask);
236- if (resolve_package(uctx, ts, mask)) {
237- matched = 1;
238-
239- } else {
240- char *p;
241-
242- if ((p = strchr(mask, '-'))) { /* try N-[E:]V */
243- char *tmp;
244- n_strdupap(mask, &tmp);
245-
246- p = strrchr(tmp, '-');
247- *p = '#';
248+ char *mask = n_array_nth(masks, i);
249
250- msgn(2, " Trying %s\n", tmp);
251-
252- if (resolve_package(uctx, ts, tmp)) {
253- matched = 1;
254-
255- } else { /* try N-[E:]V-R */
256- const char *n, *v, *r;
257- char nmask[256];
258- int32_t e = 0;
259-
260- n_strdupap(mask, &tmp);
261- if (poldek_util_parse_nevr(tmp, &n, &e, &v, &r)) {
262- if (e)
263- n_snprintf(nmask, sizeof(nmask), "%s#%d:%s-%s", n, e, v, r);
264- else
265- n_snprintf(nmask, sizeof(nmask), "%s#%s-%s", n, v, r);
266-
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);
270- }
271- }
272- }
273-
274- if (!matched) {
275- logn(LOGERR, _("%s: no such package"), mask);
276- nerr++;
277- }
278+ if (!resolve_mask(uctx, ts, mask)) {
279+ logn(LOGERR, _("%s: no such package"), mask);
280+ nerr++;
281 }
282 }
283
This page took 0.061134 seconds and 4 git commands to generate.