]> git.pld-linux.org Git - packages/poldek.git/blob - poldek-uninstall-multilib.patch
This commit was manufactured by cvs2git to create tag 'auto-ac-poldek-
[packages/poldek.git] / poldek-uninstall-multilib.patch
1 Index: arg_packages.c
2 ===================================================================
3 RCS file: /cvsroot/poldek/poldek/arg_packages.c,v
4 retrieving revision 1.24
5 retrieving revision 1.25
6 diff -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                     
94 Index: uninstall.c
95 ===================================================================
96 RCS file: /cvsroot/poldek/poldek/uninstall.c,v
97 retrieving revision 1.39
98 retrieving revision 1.40
99 diff -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.076266 seconds and 3 git commands to generate.