]>
Commit | Line | Data |
---|---|---|
2d9209ac MM |
1 | --- poldek-0.18.6.orig/./shell/shell.c 2004-09-07 11:47:47.000000000 +0000 |
2 | +++ poldek-0.18.6/./shell/shell.c 2004-09-07 11:15:33.000000000 +0000 | |
3 | @@ -997,7 +1013,7 @@ | |
4 | return 0; | |
5 | ||
6 | if (compare_ver == 0) | |
7 | - *cmprc = pkg_cmp_evr(lshpkg->pkg, shpkg->pkg); | |
8 | + *cmprc = pkg_cmp_dist_evr(lshpkg->pkg, shpkg->pkg); | |
9 | else | |
10 | *cmprc = pkg_cmp_ver(lshpkg->pkg, shpkg->pkg); | |
11 | ||
12 | --- poldek-0.18.6.orig/./pkg.c 2004-05-05 16:56:43.000000000 +0000 | |
13 | +++ poldek-0.18.6/./pkg.c 2004-09-07 00:08:12.000000000 +0000 | |
14 | @@ -49,13 +49,13 @@ | |
15 | struct pkg *pkg_new(const char *name, int32_t epoch, | |
16 | const char *version, const char *release, | |
17 | const char *arch, const char *os, | |
18 | - const char *fn, | |
19 | + const char *fn, const char *dist, | |
20 | uint32_t size, uint32_t fsize, | |
21 | uint32_t btime) | |
22 | { | |
23 | struct pkg *pkg; | |
24 | int name_len = 0, version_len = 0, release_len = 0, | |
25 | - arch_len = 0, os_len = 0, fn_len = 0; | |
26 | + arch_len = 0, os_len = 0, fn_len = 0, dist_len = 0; | |
27 | char *buf; | |
28 | int len; | |
29 | ||
30 | @@ -85,6 +85,11 @@ | |
31 | len += os_len + 1; | |
32 | } | |
33 | ||
34 | + if(dist) { | |
35 | + dist_len = strlen(dist); | |
36 | + len += dist_len + 1; | |
37 | + } | |
38 | + | |
39 | if (fn && arch) { | |
40 | char pkg_fn[1024]; | |
41 | ||
42 | @@ -141,7 +146,15 @@ | |
43 | buf += os_len; | |
44 | *buf++ = '\0'; | |
45 | } | |
46 | ||
47 | + pkg->dist=NULL; | |
48 | + if(dist) { | |
49 | + pkg->dist = buf; | |
50 | + memcpy(buf, dist, dist_len); | |
51 | + buf += dist_len; | |
52 | + *buf++ = '\0'; | |
53 | + } | |
54 | + | |
55 | pkg->fn = NULL; | |
56 | if (fn) { | |
57 | pkg->fn = buf; | |
58 | @@ -248,6 +261,7 @@ | |
59 | struct pkg *pkg; | |
60 | uint32_t *epoch, *size, *btime; | |
61 | char *name, *version, *release, *arch = NULL, *os = NULL; | |
62 | + char *dist = NULL; | |
63 | int type; | |
64 | ||
65 | headerNVR(h, (void*)&name, (void*)&version, (void*)&release); | |
66 | @@ -267,6 +281,14 @@ | |
67 | if (type != RPM_STRING_TYPE) | |
68 | arch = NULL; | |
69 | ||
70 | + if (!headerGetEntry(h, RPMTAG_DISTRIBUTION, &type, (void *)&dist, NULL)) { | |
71 | + logn(LOGERR, _("%s: read distribution tag failed"), fname); | |
72 | + return NULL; | |
73 | + } | |
74 | + | |
75 | + if (type != RPM_STRING_TYPE) | |
76 | + dist = NULL; | |
77 | + | |
78 | if (!headerGetEntry(h, RPMTAG_OS, &type, (void *)&os, NULL)) { | |
79 | if (verbose > 1) | |
80 | logn(LOGWARN, _("%s: missing OS tag"), fname); | |
81 | @@ -282,7 +304,7 @@ | |
82 | btime = NULL; | |
83 | ||
84 | pkg = pkg_new(name, epoch ? *epoch : 0, version, release, arch, os, | |
85 | - fname ? n_basenam(fname) : NULL, | |
86 | + fname ? n_basenam(fname) : NULL, dist, | |
87 | size ? *size : 0, fsize, btime ? *btime : 0); | |
88 | ||
89 | if (pkg == NULL) | |
90 | @@ -444,6 +475,19 @@ | |
91 | return pkg_cmp_ver(p1, p2); | |
92 | } | |
93 | ||
94 | +int pkg_cmp_dist_evr(const struct pkg *p1, const struct pkg *p2) | |
95 | +{ | |
96 | + int rc; | |
97 | + | |
98 | + if(p1->dist && p2->dist) | |
99 | + { | |
100 | + rc = rpmdistcmp(p1->dist, p2->dist); | |
101 | + if(rc != 0) | |
102 | + return rc; | |
103 | + } | |
104 | + | |
105 | + return pkg_cmp_evr(p1, p2); | |
106 | +} | |
107 | ||
108 | int pkg_cmp_evr(const struct pkg *p1, const struct pkg *p2) | |
109 | { | |
110 | @@ -487,6 +531,15 @@ | |
111 | //return rc; | |
112 | } | |
113 | ||
114 | +int pkg_cmp_name_dist_evr_rev(const struct pkg *p1, const struct pkg *p2) | |
115 | +{ | |
116 | + register int rc; | |
117 | + | |
118 | + if ((rc = pkg_cmp_name(p1, p2))) | |
119 | + return rc; | |
120 | + | |
121 | + return -pkg_cmp_dist_evr(p1, p2); | |
122 | +} | |
123 | ||
124 | int pkg_cmp_name_evr_rev_srcpri(const struct pkg *p1, const struct pkg *p2) | |
125 | { | |
126 | @@ -612,6 +665,15 @@ | |
127 | return pkg_cmp_name_evr_rev(p1, p2); | |
128 | } | |
129 | ||
130 | +int pkg_cmp_dist_pri(struct pkg *p1, struct pkg *p2) | |
131 | +{ | |
132 | + register int cmprc = 0; | |
133 | + | |
134 | + if ((cmprc = p1->pri - p2->pri)) | |
135 | + return cmprc; | |
136 | + | |
137 | + return pkg_cmp_name_dist_evr_rev(p1, p2); | |
138 | +} | |
139 | ||
140 | int pkg_cmp_btime(struct pkg *p1, struct pkg *p2) | |
141 | { | |
142 | --- poldek-0.18.6.orig/./pkgset.c 2004-09-07 11:47:47.000000000 +0000 | |
143 | +++ poldek-0.18.6/./pkgset.c 2004-09-06 23:02:39.000000000 +0000 | |
144 | @@ -890,7 +890,7 @@ | |
145 | } | |
146 | ||
147 | ||
148 | - findedpkg = pkg = n_array_nth(ps->pkgs, i); | |
149 | + findedpkg = pkg = n_array_nth(ps->ordered_pkgs, i); | |
150 | ||
151 | if (pkg_match_pkgdef(pkg, pdef)) { | |
152 | marked = mark_package(pkg, nodeps); | |
153 | @@ -898,7 +898,7 @@ | |
154 | ||
155 | } else { | |
156 | i++; | |
157 | - while (i < n_array_size(ps->pkgs)) { | |
158 | + while (i < n_array_size(ps->ordered_pkgs)) { | |
159 | pkg = n_array_nth(ps->pkgs, i++); | |
160 | ||
161 | if (strcmp(pkg->name, pdef->pkg->name) != 0) | |
162 | --- poldek-0.18.6.orig/./usrset.c 2004-09-07 11:47:47.000000000 +0000 | |
163 | +++ poldek-0.18.6/./usrset.c 2004-09-02 23:30:43.000000000 +0000 | |
164 | @@ -185,7 +185,7 @@ | |
165 | release = ""; | |
166 | ||
167 | pdef->pkg = pkg_new(name, epoch, version, release, NULL, NULL, NULL, | |
168 | - 0, 0, 0); | |
169 | + NULL, 0, 0, 0); | |
170 | } | |
171 | ||
172 | if (virtname) | |
173 | --- poldek-0.18.6.orig/./test_match.c 2004-05-05 16:57:09.000000000 +0000 | |
174 | +++ poldek-0.18.6/./test_match.c 2004-09-02 23:32:58.000000000 +0000 | |
175 | @@ -49,7 +49,7 @@ | |
176 | struct capreq *cap; | |
177 | ||
178 | pkg = pkg_new("poldek", epoch, versions[i], relases[j], | |
179 | - NULL, NULL, NULL, 0, 0, 0); | |
180 | + NULL, NULL, NULL, NULL, 0, 0, 0); | |
181 | cap = capreq_new("poldek", epoch, versions[i++], relases[j++], | |
182 | REL_EQ, 0); | |
183 | k = 0; | |
184 | @@ -83,7 +83,7 @@ | |
185 | struct capreq *req, *cap; | |
186 | int rc; | |
187 | ||
188 | - pkg = pkg_new("poldek", epoch, ver, rel, NULL, NULL, NULL, 0, 0, 0); | |
189 | + pkg = pkg_new("poldek", epoch, ver, rel, NULL, NULL, NULL, NULL, 0, 0, 0); | |
190 | cap = capreq_new("poldek", epoch, ver, rel, REL_EQ, 0); | |
191 | ||
192 | req = capreq_new_evr("poldek", n_strdup(evr), relation, 0); | |
193 | --- poldek-0.18.6.orig/./pkgdir.c 2004-05-06 07:57:31.000000000 +0000 | |
194 | +++ poldek-0.18.6/./pkgdir.c 2004-09-07 10:45:51.000000000 +0000 | |
195 | @@ -69,6 +69,7 @@ | |
196 | #define PKGT_HAS_BTIME (1 << 11) | |
197 | #define PKGT_HAS_GROUPID (1 << 12) | |
198 | #define PKGT_HAS_FN (1 << 13) | |
199 | +#define PKGT_HAS_DIST (1 << 14) | |
200 | ||
201 | struct pkgtags_s { | |
202 | unsigned flags; | |
203 | @@ -77,6 +78,7 @@ | |
204 | char arch[64]; | |
205 | char os[64]; | |
206 | char fn[1024]; | |
207 | + char dist[64]; | |
208 | uint32_t size; | |
209 | uint32_t fsize; | |
210 | uint32_t btime; | |
211 | @@ -1093,6 +1095,7 @@ | |
212 | case 'A': | |
213 | case 'O': | |
214 | case 'n': | |
215 | + case 'D': | |
216 | if (!add2pkgtags(&pkgt, *line, val, pkgdir->path, offs)) { | |
217 | nerr++; | |
218 | goto l_end; | |
219 | @@ -1320,6 +1323,16 @@ | |
220 | } | |
221 | break; | |
222 | ||
223 | + case 'D': | |
224 | + if (pkgt->flags & PKGT_HAS_DIST) { | |
225 | + logn(LOGERR, errmg_double_tag, pathname, offs, tag); | |
226 | + err++; | |
227 | + } else { | |
228 | + memcpy(pkgt->dist, value, sizeof(pkgt->dist) - 1); | |
229 | + pkgt->dist[ sizeof(pkgt->dist) - 1 ] = '\0'; | |
230 | + pkgt->flags |= PKGT_HAS_DIST; | |
231 | + } | |
232 | + break; | |
233 | ||
234 | case 'S': | |
235 | if (pkgt->flags & PKGT_HAS_SIZE) { | |
236 | @@ -1393,7 +1406,7 @@ | |
237 | struct pkg *pkg_new_from_tags(struct pkgtags_s *pkgt) | |
238 | { | |
239 | struct pkg *pkg; | |
240 | - char *version, *release, *arch = NULL, *os = NULL, *fn = NULL; | |
241 | + char *version, *release, *arch = NULL, *os = NULL, *fn = NULL, *dist = NULL; | |
242 | int32_t epoch; | |
243 | ||
244 | if (!(pkgt->flags & (PKGT_HAS_NAME | PKGT_HAS_EVR))) | |
245 | @@ -1407,6 +1420,9 @@ | |
246 | ||
247 | if (pkgt->flags & PKGT_HAS_FN) | |
248 | fn = pkgt->fn; | |
249 | + | |
250 | + if (pkgt->flags & PKGT_HAS_DIST) | |
251 | + dist = pkgt->dist; | |
252 | ||
253 | if (*pkgt->name == '\0' || *pkgt->evr == '\0' || *pkgt->arch == '\0') | |
254 | return NULL; | |
255 | @@ -1419,7 +1435,7 @@ | |
256 | return NULL; | |
257 | } | |
258 | ||
259 | - pkg = pkg_new(pkgt->name, epoch, version, release, arch, os, fn, | |
260 | + pkg = pkg_new(pkgt->name, epoch, version, release, arch, os, fn, dist, | |
261 | pkgt->size, pkgt->fsize, pkgt->btime); | |
262 | pkg->groupid = pkgt->groupid; | |
263 | ||
264 | @@ -1488,7 +1504,7 @@ | |
265 | ||
266 | if (*p && parse_nevr(p, &name, &epoch, &ver, &rel)) { | |
267 | struct pkg *pkg = pkg_new(name, epoch, ver, rel, NULL, NULL, NULL, | |
268 | - 0, 0, 0); | |
269 | + NULL, 0, 0, 0); | |
270 | n_array_push(pkgs, pkg); | |
271 | } | |
272 | } | |
273 | --- poldek-0.18.6.orig/./pkgset-install.c 2004-09-07 11:47:47.000000000 +0000 | |
274 | +++ poldek-0.18.6/./pkgset-install.c 2004-09-07 12:05:41.000000000 +0000 | |
275 | @@ -1998,7 +1998,7 @@ | |
276 | if (is_installed == 0) | |
277 | n_array_push(iinf->uninstalled_pkgs, | |
278 | pkg_new(pkg->name, pkg->epoch, pkg->ver, pkg->rel, | |
279 | - pkg->arch, pkg->os, NULL, | |
280 | + pkg->arch, pkg->os, NULL, NULL, | |
281 | pkg->size, pkg->fsize, | |
282 | pkg->btime)); | |
283 | } | |
284 | @@ -2136,7 +2136,7 @@ | |
285 | static void init_upgrade_s(struct upgrade_s *upg, struct pkgset *ps, | |
286 | struct inst_s *inst) | |
287 | { | |
288 | - upg->avpkgs = ps->pkgs; | |
289 | + upg->avpkgs = ps->ordered_pkgs; | |
290 | upg->install_pkgs = n_array_new(128, NULL, NULL); | |
291 | upg->db_deps = db_deps_new(); | |
292 | upg->uninst_set = dbpkg_set_new(); | |
293 | @@ -2189,10 +2189,14 @@ | |
294 | struct upgrade_s *upg = upgptr; | |
295 | struct pkg *pkg, tmpkg; | |
296 | uint32_t *epoch; | |
297 | - int i, cmprc; | |
298 | + int i, cmprc, type, count; | |
299 | ||
300 | ||
301 | recno = recno; | |
302 | + | |
303 | + if (!(headerGetEntry(h, RPMTAG_DISTRIBUTION, &type, (void *)&tmpkg.dist, | |
304 | + &count) && type == RPM_STRING_TYPE && count == 1)) | |
305 | + tmpkg.dist=NULL; | |
306 | ||
307 | if (!rpmhdr_nevr(h, &tmpkg.name, &epoch, &tmpkg.ver, &tmpkg.rel)) { | |
308 | logn(LOGERR, _("db package header corrupted (!?)")); | |
309 | @@ -2208,7 +2212,7 @@ | |
310 | } | |
311 | ||
312 | pkg = n_array_nth(upg->avpkgs, i); | |
313 | - cmprc = pkg_cmp_evr(pkg, &tmpkg); | |
314 | + cmprc = pkg_cmp_dist_evr(pkg, &tmpkg); | |
315 | if (verbose) { | |
316 | if (cmprc == 0) | |
317 | msg(3, "%-32s up to date\n", pkg_snprintf_s(&tmpkg)); | |
318 | @@ -2341,7 +2345,7 @@ | |
319 | if (n_array_size(pkgs) < 2) | |
320 | return 0; | |
321 | ||
322 | - n_array_sort(pkgs); | |
323 | +// n_array_sort(pkgs); | |
324 | ||
325 | i = n = 0; | |
326 | while (i < n_array_size(pkgs) - 1) { | |
327 | @@ -2474,6 +2478,6 @@ | |
328 | mem_info(2, "ENTER pkgset_install:"); | |
329 | init_upgrade_s(&upg, ps, inst); | |
330 | prepare_icaps(&upg); | |
331 | - if (unmark_name_dups(ps->pkgs) == 0) { | |
332 | + if (unmark_name_dups(ps->ordered_pkgs) == 0) { | |
333 | msgn(1, _("Nothing to do")); | |
334 | return 1; | |
335 | } | |
336 | --- poldek-0.18.6.orig/./rpm.c 2004-09-07 11:47:47.000000000 +0000 | |
337 | +++ poldek-0.18.6/./rpm.c 2004-09-02 23:53:05.000000000 +0000 | |
338 | @@ -497,6 +497,36 @@ | |
339 | return n; | |
340 | } | |
341 | ||
342 | +static | |
343 | +int hdr_pkg_cmp_dist_evr(Header h, const struct pkg *pkg) | |
344 | +{ | |
345 | + int rc; | |
346 | + struct pkg tmpkg; | |
347 | + uint32_t *epoch; | |
348 | + int count; | |
349 | + int type; | |
350 | + | |
351 | + if (!(headerGetEntry(h, RPMTAG_DISTRIBUTION, &type, (void *)&tmpkg.dist, | |
352 | + &count) && type == RPM_STRING_TYPE && count == 1)) | |
353 | + tmpkg.dist=NULL; | |
354 | + | |
355 | + headerNVR(h, (void*)&tmpkg.name, (void*)&tmpkg.ver, | |
356 | + (void*)&tmpkg.rel); | |
357 | + | |
358 | + if (tmpkg.name == NULL || tmpkg.ver == NULL || tmpkg.rel == NULL) { | |
359 | + logn(LOGERR, "headerNVR() failed"); | |
360 | + return 0; | |
361 | + } | |
362 | + | |
363 | + if (headerGetEntry(h, RPMTAG_EPOCH, &rc, (void *)&epoch, NULL)) | |
364 | + tmpkg.epoch = *epoch; | |
365 | + else | |
366 | + tmpkg.epoch = 0; | |
367 | + | |
368 | + rc = pkg_cmp_dist_evr(&tmpkg, pkg); | |
369 | + | |
370 | + return rc; | |
371 | +} | |
372 | ||
373 | static | |
374 | int hdr_pkg_cmp_evr(Header h, const struct pkg *pkg) | |
375 | @@ -544,7 +574,7 @@ | |
376 | ||
377 | } else { | |
378 | if (cmprc) | |
379 | - *cmprc = -hdr_pkg_cmp_evr(dbrec->h, pkg); | |
380 | + *cmprc = -hdr_pkg_cmp_dist_evr(dbrec->h, pkg); | |
381 | ||
382 | if (dbrecp) { | |
383 | dbrecp->recno = dbrec->recno; | |
384 | --- poldek-0.18.6.orig/./pkg.h 2004-03-22 17:31:51.000000000 +0000 | |
385 | +++ poldek-0.18.6/./pkg.h 2004-09-06 22:43:19.000000000 +0000 | |
386 | @@ -107,6 +107,7 @@ | |
387 | char *arch; | |
388 | char *os; | |
389 | char *fn; | |
390 | + char *dist; | |
391 | ||
392 | tn_array *caps; /* capabilities */ | |
393 | tn_array *reqs; /* requirements */ | |
394 | @@ -144,7 +145,7 @@ | |
395 | struct pkg *pkg_new(const char *name, int32_t epoch, | |
396 | const char *version, const char *release, | |
397 | const char *arch, const char *os, | |
398 | - const char *fn, | |
399 | + const char *fn, const char *dist, | |
400 | uint32_t size, uint32_t fsize, | |
401 | uint32_t btime); | |
402 | ||
403 | @@ -181,6 +182,7 @@ | |
404 | int pkg_cmp_name_evr_rev_srcpri(const struct pkg *p1, const struct pkg *p2); | |
405 | ||
406 | int pkg_cmp_pri(struct pkg *p1, struct pkg *p2); | |
407 | +int pkg_cmp_dist_pri(struct pkg *p1, struct pkg *p2); | |
408 | ||
409 | int pkg_cmp_btime(struct pkg *p1, struct pkg *p2); | |
410 | int pkg_cmp_btime_rev(struct pkg *p1, struct pkg *p2); | |
411 | --- poldek-0.18.6.orig/./pkgset-order.c 2004-09-07 11:47:47.000000000 +0000 | |
412 | +++ poldek-0.18.6/./pkgset-order.c 2004-09-06 22:46:32.000000000 +0000 | |
413 | @@ -235,7 +235,7 @@ | |
414 | tn_array *ordered = NULL; | |
415 | int nloops, verbose_; | |
416 | ||
417 | - n_array_isort_ex(pkgs, (tn_fn_cmp)pkg_cmp_pri); | |
418 | + n_array_isort_ex(pkgs, (tn_fn_cmp)pkg_cmp_dist_pri); | |
419 | ||
420 | verbose_ = verbose; | |
421 | verbose = -10; | |
422 | --- poldek-0.18.6.orig/./pkgdir_save.c 2004-05-05 16:56:43.000000000 +0000 | |
423 | +++ poldek-0.18.6/./pkgdir_save.c 2004-09-07 10:30:15.000000000 +0000 | |
424 | @@ -170,6 +170,9 @@ | |
425 | ||
426 | if (pkg->fn) | |
427 | fprintf(stream, "n: %s\n", pkg->fn); | |
428 | + | |
429 | + if (pkg->dist) | |
430 | + fprintf(stream, "D: %s\n", pkg->dist); | |
431 | ||
432 | fprintf(stream, "F:\n"); | |
433 | store_pkg_fields(stream, pkg->size, pkg->fsize, pkg->btime, pkg->groupid); |