aboutsummaryrefslogtreecommitdiffstats
path: root/URPM.xs
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2007-08-12 20:44:55 +0000
committerPascal Rigaux <pixel@mandriva.com>2007-08-12 20:44:55 +0000
commit2a90cb014e855a07d89bbc22b1e2ac83f7b03669 (patch)
tree57ff14d2dc37e9601235d2f196132715ce2e9e9c /URPM.xs
parent79115dcc188f4436614d2932707eda6bf2739c18 (diff)
downloadperl-URPM-2a90cb014e855a07d89bbc22b1e2ac83f7b03669.tar
perl-URPM-2a90cb014e855a07d89bbc22b1e2ac83f7b03669.tar.gz
perl-URPM-2a90cb014e855a07d89bbc22b1e2ac83f7b03669.tar.bz2
perl-URPM-2a90cb014e855a07d89bbc22b1e2ac83f7b03669.tar.xz
perl-URPM-2a90cb014e855a07d89bbc22b1e2ac83f7b03669.zip
- fix dropping tags from rpm header.
it hasn't work since MDK8.1 and rpm 4.0. it may break urpmi!! but potentially allows a much smaller hdlist.cz :)
Diffstat (limited to 'URPM.xs')
-rw-r--r--URPM.xs89
1 files changed, 62 insertions, 27 deletions
diff --git a/URPM.xs b/URPM.xs
index 2678433..e36fe61 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -1084,6 +1084,67 @@ parse_line(AV *depslist, HV *provides, URPM__Package pkg, char *buff, SV *urpm,
}
}
+static void pack_rpm_header(Header *h) {
+ Header packed = headerNew();
+ HeaderIterator hi;
+ int type, c, tag;
+ void *p;
+
+ for (hi = headerInitIterator(*h);
+ headerNextIterator(hi, &tag, &type, (void *) &p, &c);
+ p = headerFreeData(p, type))
+ {
+ // fprintf(stderr, "adding %s %d\n", tagname(tag), c);
+ headerAddEntry(packed, tag, type, p, c);
+ }
+
+ headerFreeIterator(hi);
+ headerFree(*h);
+
+ *h = packed;
+}
+
+static void drop_tags(Header *h) {
+ headerRemoveEntry(*h, RPMTAG_FILEUSERNAME); /* user ownership is correct */
+ headerRemoveEntry(*h, RPMTAG_FILEGROUPNAME); /* group ownership is correct */
+ headerRemoveEntry(*h, RPMTAG_FILEMTIMES); /* correct time without it */
+ headerRemoveEntry(*h, RPMTAG_FILEINODES); /* hardlinks work without it */
+ headerRemoveEntry(*h, RPMTAG_FILEDEVICES); /* it is the same number for every file */
+ headerRemoveEntry(*h, RPMTAG_FILESIZES); /* ? */
+ headerRemoveEntry(*h, RPMTAG_FILERDEVS); /* it seems unused. always empty */
+ headerRemoveEntry(*h, RPMTAG_FILEVERIFYFLAGS); /* only used for -V */
+ headerRemoveEntry(*h, RPMTAG_FILEDIGESTALGOS); /* only used for -V */
+ headerRemoveEntry(*h, RPMTAG_FILEDIGESTS); /* only used for -V */
+ /* keep RPMTAG_FILEFLAGS for %config (rpmnew) to work */
+ /* keep RPMTAG_FILELANGS for %lang (_install_langs) to work */
+ /* keep RPMTAG_FILELINKTOS for checking conflicts between symlinks */
+ /* keep RPMTAG_FILEMODES otherwise it segfaults with excludepath */
+
+ /* keep RPMTAG_POSTIN RPMTAG_POSTUN RPMTAG_PREIN RPMTAG_PREUN */
+ /* keep RPMTAG_TRIGGERSCRIPTS RPMTAG_TRIGGERVERSION RPMTAG_TRIGGERFLAGS RPMTAG_TRIGGERNAME */
+ /* small enough, and only in some packages. not needed per se */
+
+ headerRemoveEntry(*h, RPMTAG_ICON);
+ headerRemoveEntry(*h, RPMTAG_GIF);
+ headerRemoveEntry(*h, RPMTAG_EXCLUDE);
+ headerRemoveEntry(*h, RPMTAG_EXCLUSIVE);
+ headerRemoveEntry(*h, RPMTAG_COOKIE);
+ headerRemoveEntry(*h, RPMTAG_VERIFYSCRIPT);
+
+ /* always the same for our packages */
+ headerRemoveEntry(*h, RPMTAG_VENDOR);
+ headerRemoveEntry(*h, RPMTAG_DISTRIBUTION);
+
+ /* keep RPMTAG_SIGSIZE, useful to tell the size of the rpm file (+440) */
+
+ headerRemoveEntry(*h, RPMTAG_DSAHEADER);
+ headerRemoveEntry(*h, RPMTAG_SHA1HEADER);
+ headerRemoveEntry(*h, RPMTAG_SIGMD5);
+ headerRemoveEntry(*h, RPMTAG_SIGGPG);
+
+ pack_rpm_header(h);
+}
+
static int
update_header(char *filename, URPM__Package pkg, int keep_all_tags, int vsflags) {
int d = open(filename, O_RDONLY);
@@ -1117,33 +1178,7 @@ update_header(char *filename, URPM__Package pkg, int keep_all_tags, int vsflags)
pkg->h = header;
pkg->flag &= ~FLAG_NO_HEADER_FREE;
- if (!keep_all_tags) {
- headerRemoveEntry(pkg->h, RPMTAG_POSTIN);
- headerRemoveEntry(pkg->h, RPMTAG_POSTUN);
- headerRemoveEntry(pkg->h, RPMTAG_PREIN);
- headerRemoveEntry(pkg->h, RPMTAG_PREUN);
- headerRemoveEntry(pkg->h, RPMTAG_FILEUSERNAME);
- headerRemoveEntry(pkg->h, RPMTAG_FILEGROUPNAME);
- headerRemoveEntry(pkg->h, RPMTAG_FILEVERIFYFLAGS);
- headerRemoveEntry(pkg->h, RPMTAG_FILERDEVS);
- headerRemoveEntry(pkg->h, RPMTAG_FILEMTIMES);
- headerRemoveEntry(pkg->h, RPMTAG_FILEDEVICES);
- headerRemoveEntry(pkg->h, RPMTAG_FILEINODES);
- headerRemoveEntry(pkg->h, RPMTAG_TRIGGERSCRIPTS);
- headerRemoveEntry(pkg->h, RPMTAG_TRIGGERVERSION);
- headerRemoveEntry(pkg->h, RPMTAG_TRIGGERFLAGS);
- headerRemoveEntry(pkg->h, RPMTAG_TRIGGERNAME);
- headerRemoveEntry(pkg->h, RPMTAG_CHANGELOGTIME);
- headerRemoveEntry(pkg->h, RPMTAG_CHANGELOGNAME);
- headerRemoveEntry(pkg->h, RPMTAG_CHANGELOGTEXT);
- headerRemoveEntry(pkg->h, RPMTAG_ICON);
- headerRemoveEntry(pkg->h, RPMTAG_GIF);
- headerRemoveEntry(pkg->h, RPMTAG_VENDOR);
- headerRemoveEntry(pkg->h, RPMTAG_EXCLUDE);
- headerRemoveEntry(pkg->h, RPMTAG_EXCLUSIVE);
- headerRemoveEntry(pkg->h, RPMTAG_DISTRIBUTION);
- headerRemoveEntry(pkg->h, RPMTAG_VERIFYSCRIPT);
- }
+ if (!keep_all_tags) drop_tags(&pkg->h);
return 1;
}
rpmtsFree(ts);