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
7 - *cmprc = pkg_cmp_evr(lshpkg->pkg, shpkg->pkg);
8 + *cmprc = pkg_cmp_dist_evr(lshpkg->pkg, shpkg->pkg);
10 *cmprc = pkg_cmp_ver(lshpkg->pkg, shpkg->pkg);
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
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,
19 + const char *fn, const char *dist,
20 uint32_t size, uint32_t fsize,
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;
35 + dist_len = strlen(dist);
36 + len += dist_len + 1;
50 + memcpy(buf, dist, dist_len);
60 uint32_t *epoch, *size, *btime;
61 char *name, *version, *release, *arch = NULL, *os = NULL;
65 headerNVR(h, (void*)&name, (void*)&version, (void*)&release);
67 if (type != RPM_STRING_TYPE)
70 + if (!headerGetEntry(h, RPMTAG_DISTRIBUTION, &type, (void *)&dist, NULL)) {
74 + if (type != RPM_STRING_TYPE)
77 if (!headerGetEntry(h, RPMTAG_OS, &type, (void *)&os, NULL)) {
79 logn(LOGWARN, _("%s: missing OS tag"), fname);
83 pkg = pkg_new(name, epoch ? *epoch : 0, version, release, arch, os,
84 - fname ? n_basenam(fname) : NULL,
85 + fname ? n_basenam(fname) : NULL, dist,
86 size ? *size : 0, fsize, btime ? *btime : 0);
90 return pkg_cmp_ver(p1, p2);
93 +int pkg_cmp_dist_evr(const struct pkg *p1, const struct pkg *p2)
97 + if(p1->dist && p2->dist)
99 + rc = rpmdistcmp(p1->dist, p2->dist);
104 + return pkg_cmp_evr(p1, p2);
107 int pkg_cmp_evr(const struct pkg *p1, const struct pkg *p2)
113 +int pkg_cmp_name_dist_evr_rev(const struct pkg *p1, const struct pkg *p2)
117 + if ((rc = pkg_cmp_name(p1, p2)))
120 + return -pkg_cmp_dist_evr(p1, p2);
123 int pkg_cmp_name_evr_rev_srcpri(const struct pkg *p1, const struct pkg *p2)
126 return pkg_cmp_name_evr_rev(p1, p2);
129 +int pkg_cmp_dist_pri(struct pkg *p1, struct pkg *p2)
131 + register int cmprc = 0;
133 + if ((cmprc = p1->pri - p2->pri))
136 + return pkg_cmp_name_dist_evr_rev(p1, p2);
139 int pkg_cmp_btime(struct pkg *p1, struct pkg *p2)
141 @@ -1406,7 +1406,7 @@
144 arr = n_array_new(size, (tn_fn_free)pkg_free,
145 - (tn_fn_cmp)pkg_cmp_name_evr_rev);
146 + (tn_fn_cmp)pkg_cmp_name_dist_evr_rev);
147 n_array_ctl(arr, TN_ARRAY_AUTOSORTED);
150 --- poldek-0.18.6.orig/./usrset.c 2004-09-07 11:47:47.000000000 +0000
151 +++ poldek-0.18.6/./usrset.c 2004-09-02 23:30:43.000000000 +0000
155 pdef->pkg = pkg_new(name, epoch, version, release, NULL, NULL, NULL,
161 --- poldek-0.18.6.orig/./test_match.c 2004-05-05 16:57:09.000000000 +0000
162 +++ poldek-0.18.6/./test_match.c 2004-09-02 23:32:58.000000000 +0000
166 pkg = pkg_new("poldek", epoch, versions[i], relases[j],
167 - NULL, NULL, NULL, 0, 0, 0);
168 + NULL, NULL, NULL, NULL, 0, 0, 0);
169 cap = capreq_new("poldek", epoch, versions[i++], relases[j++],
173 struct capreq *req, *cap;
176 - pkg = pkg_new("poldek", epoch, ver, rel, NULL, NULL, NULL, 0, 0, 0);
177 + pkg = pkg_new("poldek", epoch, ver, rel, NULL, NULL, NULL, NULL, 0, 0, 0);
178 cap = capreq_new("poldek", epoch, ver, rel, REL_EQ, 0);
180 req = capreq_new_evr("poldek", n_strdup(evr), relation, 0);
181 --- poldek-0.18.6.orig/./pkgdir.c 2004-05-06 07:57:31.000000000 +0000
182 +++ poldek-0.18.6/./pkgdir.c 2004-09-07 10:45:51.000000000 +0000
184 #define PKGT_HAS_BTIME (1 << 11)
185 #define PKGT_HAS_GROUPID (1 << 12)
186 #define PKGT_HAS_FN (1 << 13)
187 +#define PKGT_HAS_DIST (1 << 14)
199 @@ -1093,6 +1095,7 @@
204 if (!add2pkgtags(&pkgt, *line, val, pkgdir->path, offs)) {
207 @@ -1320,6 +1323,16 @@
212 + if (pkgt->flags & PKGT_HAS_DIST) {
213 + logn(LOGERR, errmg_double_tag, pathname, offs, tag);
216 + memcpy(pkgt->dist, value, sizeof(pkgt->dist) - 1);
217 + pkgt->dist[ sizeof(pkgt->dist) - 1 ] = '\0';
218 + pkgt->flags |= PKGT_HAS_DIST;
223 if (pkgt->flags & PKGT_HAS_SIZE) {
224 @@ -1393,7 +1406,7 @@
225 struct pkg *pkg_new_from_tags(struct pkgtags_s *pkgt)
228 - char *version, *release, *arch = NULL, *os = NULL, *fn = NULL;
229 + char *version, *release, *arch = NULL, *os = NULL, *fn = NULL, *dist = NULL;
232 if (!(pkgt->flags & (PKGT_HAS_NAME | PKGT_HAS_EVR)))
233 @@ -1407,6 +1420,9 @@
235 if (pkgt->flags & PKGT_HAS_FN)
238 + if (pkgt->flags & PKGT_HAS_DIST)
241 if (*pkgt->name == '\0' || *pkgt->evr == '\0' || *pkgt->arch == '\0')
243 @@ -1419,7 +1435,7 @@
247 - pkg = pkg_new(pkgt->name, epoch, version, release, arch, os, fn,
248 + pkg = pkg_new(pkgt->name, epoch, version, release, arch, os, fn, dist,
249 pkgt->size, pkgt->fsize, pkgt->btime);
250 pkg->groupid = pkgt->groupid;
252 @@ -1488,7 +1504,7 @@
254 if (*p && parse_nevr(p, &name, &epoch, &ver, &rel)) {
255 struct pkg *pkg = pkg_new(name, epoch, ver, rel, NULL, NULL, NULL,
258 n_array_push(pkgs, pkg);
261 --- poldek-0.18.6.orig/./pkgset-install.c 2004-09-07 11:47:47.000000000 +0000
262 +++ poldek-0.18.6/./pkgset-install.c 2004-09-07 12:05:41.000000000 +0000
263 @@ -1998,7 +1998,7 @@
264 if (is_installed == 0)
265 n_array_push(iinf->uninstalled_pkgs,
266 pkg_new(pkg->name, pkg->epoch, pkg->ver, pkg->rel,
267 - pkg->arch, pkg->os, NULL,
268 + pkg->arch, pkg->os, NULL, NULL,
269 pkg->size, pkg->fsize,
272 @@ -2189,10 +2189,14 @@
273 struct upgrade_s *upg = upgptr;
274 struct pkg *pkg, tmpkg;
277 + int i, cmprc, type, count;
282 + if (!(headerGetEntry(h, RPMTAG_DISTRIBUTION, &type, (void *)&tmpkg.dist,
283 + &count) && type == RPM_STRING_TYPE && count == 1))
286 if (!rpmhdr_nevr(h, &tmpkg.name, &epoch, &tmpkg.ver, &tmpkg.rel)) {
287 logn(LOGERR, _("db package header corrupted (!?)"));
288 @@ -2208,7 +2212,7 @@
291 pkg = n_array_nth(upg->avpkgs, i);
292 - cmprc = pkg_cmp_evr(pkg, &tmpkg);
293 + cmprc = pkg_cmp_dist_evr(pkg, &tmpkg);
296 msg(3, "%-32s up to date\n", pkg_snprintf_s(&tmpkg));
297 --- poldek-0.18.6.orig/./rpm.c 2004-09-07 11:47:47.000000000 +0000
298 +++ poldek-0.18.6/./rpm.c 2004-09-02 23:53:05.000000000 +0000
304 +int hdr_pkg_cmp_dist_evr(Header h, const struct pkg *pkg)
312 + if (!(headerGetEntry(h, RPMTAG_DISTRIBUTION, &type, (void *)&tmpkg.dist,
313 + &count) && type == RPM_STRING_TYPE && count == 1))
316 + headerNVR(h, (void*)&tmpkg.name, (void*)&tmpkg.ver,
317 + (void*)&tmpkg.rel);
319 + if (tmpkg.name == NULL || tmpkg.ver == NULL || tmpkg.rel == NULL) {
320 + logn(LOGERR, "headerNVR() failed");
324 + if (headerGetEntry(h, RPMTAG_EPOCH, &rc, (void *)&epoch, NULL))
325 + tmpkg.epoch = *epoch;
329 + rc = pkg_cmp_dist_evr(&tmpkg, pkg);
335 int hdr_pkg_cmp_evr(Header h, const struct pkg *pkg)
340 - *cmprc = -hdr_pkg_cmp_evr(dbrec->h, pkg);
341 + *cmprc = -hdr_pkg_cmp_dist_evr(dbrec->h, pkg);
344 dbrecp->recno = dbrec->recno;
345 --- poldek-0.18.6.orig/./pkg.h 2004-03-22 17:31:51.000000000 +0000
346 +++ poldek-0.18.6/./pkg.h 2004-09-06 22:43:19.000000000 +0000
353 tn_array *caps; /* capabilities */
354 tn_array *reqs; /* requirements */
356 struct pkg *pkg_new(const char *name, int32_t epoch,
357 const char *version, const char *release,
358 const char *arch, const char *os,
360 + const char *fn, const char *dist,
361 uint32_t size, uint32_t fsize,
365 int pkg_cmp_name_evr_rev_srcpri(const struct pkg *p1, const struct pkg *p2);
367 int pkg_cmp_pri(struct pkg *p1, struct pkg *p2);
368 +int pkg_cmp_dist_pri(struct pkg *p1, struct pkg *p2);
370 int pkg_cmp_btime(struct pkg *p1, struct pkg *p2);
371 int pkg_cmp_btime_rev(struct pkg *p1, struct pkg *p2);
372 --- poldek-0.18.6.orig/./pkgset-order.c 2004-09-07 11:47:47.000000000 +0000
373 +++ poldek-0.18.6/./pkgset-order.c 2004-09-06 22:46:32.000000000 +0000
375 tn_array *ordered = NULL;
376 int nloops, verbose_;
378 - n_array_isort_ex(pkgs, (tn_fn_cmp)pkg_cmp_pri);
379 + n_array_isort_ex(pkgs, (tn_fn_cmp)pkg_cmp_pri);
383 --- poldek-0.18.6.orig/./pkgdir_save.c 2004-05-05 16:56:43.000000000 +0000
384 +++ poldek-0.18.6/./pkgdir_save.c 2004-09-07 10:30:15.000000000 +0000
388 fprintf(stream, "n: %s\n", pkg->fn);
391 + fprintf(stream, "D: %s\n", pkg->dist);
393 fprintf(stream, "F:\n");
394 store_pkg_fields(stream, pkg->size, pkg->fsize, pkg->btime, pkg->groupid);