]> git.pld-linux.org Git - packages/poldek.git/blame - poldek-distver.patch
- dist versioning support
[packages/poldek.git] / poldek-distver.patch
CommitLineData
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);
This page took 0.086842 seconds and 4 git commands to generate.