stable update of reprepro
I've prepared an upload of reprepro targeted for
stable-proposed-updates to work around testing and unstable
soon no longer having MD5Sum fields in the Release files.
Attached the .changes and a diff of the .debian.tar.gz files
and of the _amd64.deb files unpacked.
Any chance for this to be accepted? Any modifications still
needed to get in?
Bernhard R. Link
Format: 1.8
Date: Tue, 22 Feb 2011 21:16:03 CET
Source: reprepro
Binary: reprepro
Architecture: source amd64
Version: 4.2.0-2squeeze1
Distribution: stable-proposed-updates
Urgency: low
Maintainer: Bernhard R. Link <brlink@debian.org>
Changed-By: Bernhard R. Link <brlink@debian.org>
Description:
reprepro - Debian package repository producer
Closes: 614361
Changes:
reprepro (4.2.0-2squeeze1) stable-proposed-updates; urgency=low
.
* handle Release files without MD5Sum (Closes: 614361)
Checksums-Sha256:
7bbf1e4118ed3e4d3729d06a72b54e63e95bbb5cad5b9208ba8711d4c0993fce 1032 reprepro_4.2.0-2squeeze1.dsc
ac6a41448cf935b726104be110f8656f1d10f65cd7fcffe57fb05428344c6012 16730 reprepro_4.2.0-2squeeze1.debian.tar.gz
4458aaed733018f818c891cda9ad00fcd99b8d53ccabb4734a83ee0c3a03e425 482416 reprepro_4.2.0-2squeeze1_amd64.deb
Checksums-Sha1:
6643d1032948287379bcaacc0863760e4b6feaac 1032 reprepro_4.2.0-2squeeze1.dsc
432b5eea4a4d076f59a6dc7a447e494d509b709f 16730 reprepro_4.2.0-2squeeze1.debian.tar.gz
12654e3746e85987d4994b5b0da3cb1a85a6efd1 482416 reprepro_4.2.0-2squeeze1_amd64.deb
Files:
5eb4970ee7e8fddc8ba995ecdb4adabe 1032 utils extra reprepro_4.2.0-2squeeze1.dsc
1079f4040c8c55c49da98f01da7608fa 16730 utils extra reprepro_4.2.0-2squeeze1.debian.tar.gz
2ca12e3e9c63ad13879e7cc1e5296982 482416 utils extra reprepro_4.2.0-2squeeze1_amd64.deb
diff -r -u -N old/debian/changelog new/debian/changelog
--- old/debian/changelog 2010-10-24 11:14:27.000000000 +0200
+++ new/debian/changelog 2011-02-22 20:53:45.000000000 +0100
@@ -1,3 +1,9 @@
+reprepro (4.2.0-2squeeze1) stable-proposed-updates; urgency=low
+
+ * handle Release files without MD5Sum (Closes: 614361)
+
+ -- Bernhard R. Link <brlink@debian.org> Tue, 22 Feb 2011 20:39:37 +0100
+
reprepro (4.2.0-2) unstable; urgency=low
* include sys/stat.h in filecntl.h (Closes: 600982)
diff -r -u -N old/debian/patches/0006-support-Release-files-without-MD5Sum.patch new/debian/patches/0006-support-Release-files-without-MD5Sum.patch
--- old/debian/patches/0006-support-Release-files-without-MD5Sum.patch 1970-01-01 01:00:00.000000000 +0100
+++ new/debian/patches/0006-support-Release-files-without-MD5Sum.patch 2011-02-22 20:54:09.000000000 +0100
@@ -0,0 +1,223 @@
+From b13d42711ce90193af66d6dc9e208c849d59b787 Mon Sep 17 00:00:00 2001
+From: Bernhard R. Link <brlink@debian.org>
+Date: Tue, 22 Feb 2011 20:21:17 +0100
+Subject: support Release files without MD5Sum
+
+If a Release file has no MD5Sum field, fall back to only
+use the other Checksums.
+
+This patch is similar to the one in 4.5.0 but more specific
+to avoid any changes in cases where there is a MD5Sum field.
+
+Bug-Debian: 614361
+---
+ checksums.c | 59 ++++++++++++++++++++++++++++++++++++--------------------
+ checksums.h | 2 +-
+ readrelease.c | 23 +++++++++++++--------
+ sources.c | 6 ++--
+ tool.c | 2 +-
+ 5 files changed, 57 insertions(+), 35 deletions(-)
+
+diff --git a/checksums.c b/checksums.c
+index af38753..fa66b5c 100644
+--- a/checksums.c
++++ b/checksums.c
+@@ -674,15 +674,23 @@ retvalue hashline_parse(const char *filenametoshow, const char *line, enum check
+ return RET_OK;
+ }
+
+-retvalue checksumsarray_parse(struct checksumsarray *out, const struct strlist l[cs_hashCOUNT], const char *filenametoshow) {
++retvalue checksumsarray_parse(struct checksumsarray *out, const struct strlist l[cs_hashCOUNT], const char *filenametoshow, bool havemd5) {
+ retvalue r;
+ int i;
+ struct checksumsarray a;
+ struct strlist filenames;
+- size_t count = l[cs_md5sum].count;
++ size_t count;
+ struct hashes *parsed;
+ enum checksumtype cs;
+
++ if( havemd5 ) {
++ count = l[cs_md5sum].count;
++ } else {
++ count = 0;
++ for( cs = cs_md5sum ; cs < cs_hashCOUNT ; cs++ )
++ count += l[cs].count;
++ }
++
+ parsed = calloc(count, sizeof(struct hashes));
+ if( FAILEDTOALLOC(parsed) ) {
+ return RET_ERROR_OOM;
+@@ -741,35 +749,44 @@ retvalue checksumsarray_parse(struct checksumsarray *out, const struct strlist l
+ } else {
+ struct hash_data *hashes;
+
+- // TODO: suboptimal, as we know where
+- // it likely is...
+ fileofs = strlist_ofs(&filenames, filename);
+ if( fileofs == -1 ) {
+- // TODO: future versions might add files
+- // her to the previous know ones instead,
+- // once md5sum hash may be empty...
+- fprintf(stderr,
++ if( havemd5 ) {
++ fprintf(stderr,
+ "WARNING: %s checksum line ' %s' in '%s' has no corresponding Files line!\n",
+- hash_name[cs], line,
+- filenametoshow);
+- }
+- hashes = parsed[fileofs].hashes;
+- if( unlikely( hashes[cs_length].len
+- != size_len
+- || memcmp(hashes[cs_length].start,
+- size_start, size_len) != 0) ) {
+- fprintf(stderr,
++ hash_name[cs], line,
++ filenametoshow);
++ continue;
++ }
++ fileofs = filenames.count;
++ r = strlist_add_dup(&filenames, filename);
++ if( RET_WAS_ERROR(r) ) {
++ strlist_done(&filenames);
++ free(parsed);
++ return r;
++ }
++ hashes = parsed[fileofs].hashes;
++ hashes[cs_length].start = size_start;
++ hashes[cs_length].len = size_len;
++ } else {
++ hashes = parsed[fileofs].hashes;
++ if( unlikely( hashes[cs_length].len
++ != size_len
++ || memcmp(hashes[cs_length].start,
++ size_start, size_len) != 0) ) {
++ fprintf(stderr,
+ "WARNING: %s checksum line ' %s' in '%s' contradicts 'Files' filesize!\n",
+- hash_name[cs], line,
+- filenametoshow);
+- continue;
++ hash_name[cs], line,
++ filenametoshow);
++ continue;
++ }
+ }
+ hashes[cs].start = hash_start;
+ hashes[cs].len = hash_len;
+ }
+ }
+ }
+- assert( count == (size_t)filenames.count );
++ assert( count >= (size_t)filenames.count );
+
+ if( filenames.count == 0 ) {
+ strlist_done(&filenames);
+diff --git a/checksums.h b/checksums.h
+index 2f8b3ff..9fbf890 100644
+--- a/checksums.h
++++ b/checksums.h
+@@ -107,7 +107,7 @@ struct checksumsarray {
+ };
+ void checksumsarray_move(/*@out@*/struct checksumsarray *, /*@special@*/struct checksumsarray *array)/*@requires maxSet(array->names.values) >= array->names.count /\ maxSet(array->checksums) >= array->names.count @*/ /*@releases array->checksums, array->names.values @*/;
+ void checksumsarray_done(/*@special@*/struct checksumsarray *array) /*@requires maxSet(array->names.values) >= array->names.count /\ maxSet(array->checksums) >= array->names.count @*/ /*@releases array->checksums, array->names.values @*/;
+-retvalue checksumsarray_parse(/*@out@*/struct checksumsarray *, const struct strlist [cs_hashCOUNT], const char *filenametoshow);
++retvalue checksumsarray_parse(/*@out@*/struct checksumsarray *, const struct strlist [cs_hashCOUNT], const char *filenametoshow, bool havemd5);
+ retvalue checksumsarray_genfilelist(const struct checksumsarray *, /*@out@*/char **, /*@out@*/char **, /*@out@*/char **);
+ retvalue checksumsarray_include(struct checksumsarray *, /*@only@*/char *, const struct checksums *);
+ void checksumsarray_resetunsupported(const struct checksumsarray *, bool[cs_hashCOUNT]);
+diff --git a/readrelease.c b/readrelease.c
+index 3def5d9..f5cd758 100644
+--- a/readrelease.c
++++ b/readrelease.c
+@@ -32,6 +32,8 @@ retvalue release_getchecksums(const char *releasefile, const bool ignore[cs_hash
+ char *chunk;
+ struct strlist files[cs_hashCOUNT];
+ enum checksumtype cs;
++ bool foundchecksums = false;
++ bool havemd5 = true;
+
+ r = readtextfile(releasefile, releasefile, &chunk, NULL);
+ assert( r != RET_NOTHING );
+@@ -47,23 +49,26 @@ retvalue release_getchecksums(const char *releasefile, const bool ignore[cs_hash
+ &files[cs]);
+ if( r == RET_NOTHING ) {
+ if( cs == cs_md5sum ) {
+- fprintf(stderr,
+-"Missing 'MD5Sum' field in Release file '%s'!\n", releasefile);
+- r = RET_ERROR;
+- } else
+- strlist_init(&files[cs]);
+- }
+- if( RET_WAS_ERROR(r) ) {
++ havemd5 = false;
++ }
++ strlist_init(&files[cs]);
++ } else if( RET_WAS_ERROR(r) ) {
+ while( cs-- > cs_md5sum ) {
+ strlist_done(&files[cs]);
+ }
+ free(chunk);
+ return r;
+- }
++ } else
++ foundchecksums = true;
+ }
+ free(chunk);
++ if( !foundchecksums ) {
++ fprintf(stderr,
++"Missing 'MD5Sum' field in Release file '%s'!\n", releasefile);
++ return RET_ERROR;
++ }
+
+- r = checksumsarray_parse(out, files, releasefile);
++ r = checksumsarray_parse(out, files, releasefile, havemd5);
+ for( cs = cs_md5sum ; cs < cs_hashCOUNT ; cs++ ) {
+ strlist_done(&files[cs]);
+ }
+diff --git a/sources.c b/sources.c
+index c3944b1..77155f6 100644
+--- a/sources.c
++++ b/sources.c
+@@ -165,7 +165,7 @@ retvalue sources_getinstalldata(const struct target *t, const char *packagename,
+ return r;
+ }
+ }
+- r = checksumsarray_parse(&files, filelines, packagename);
++ r = checksumsarray_parse(&files, filelines, packagename, true);
+ for( cs = cs_md5sum ; cs < cs_hashCOUNT ; cs++ ) {
+ strlist_done(&filelines[cs]);
+ }
+@@ -303,7 +303,7 @@ retvalue sources_getchecksums(const char *chunk, struct checksumsarray *out) {
+ return r;
+ }
+ }
+- r = checksumsarray_parse(&a, filelines, "source chunk");
++ r = checksumsarray_parse(&a, filelines, "source chunk", true);
+ for( cs = cs_md5sum ; cs < cs_hashCOUNT ; cs++ ) {
+ strlist_done(&filelines[cs]);
+ }
+@@ -529,7 +529,7 @@ retvalue sources_readdsc(struct dsc_headers *dsc, const char *filename, const ch
+ return r;
+ }
+ }
+- r = checksumsarray_parse(&dsc->files, filelines, filenametoshow);
++ r = checksumsarray_parse(&dsc->files, filelines, filenametoshow, true);
+ for( cs = cs_md5sum ; cs < cs_hashCOUNT ; cs++ ) {
+ strlist_done(&filelines[cs]);
+ }
+diff --git a/tool.c b/tool.c
+index b6ab2f2..ba9fa64 100644
+--- a/tool.c
++++ b/tool.c
+@@ -686,7 +686,7 @@ static retvalue read_dscfile(const char *fullfilename, struct dscfile **dsc) {
+ return r;
+ }
+ }
+- r = checksumsarray_parse(&n->expected, filelines, fullfilename);
++ r = checksumsarray_parse(&n->expected, filelines, fullfilename, true);
+ for( cs = cs_md5sum ; cs < cs_hashCOUNT ; cs++ ) {
+ strlist_done(&filelines[cs]);
+ }
+--
+1.5.6.5
+
diff -r -u -N old/debian/patches/series new/debian/patches/series
--- old/debian/patches/series 2010-10-24 11:14:27.000000000 +0200
+++ new/debian/patches/series 2011-02-22 20:54:09.000000000 +0100
@@ -3,3 +3,4 @@
0003-replace-sn-with-no-copy-in-changelogs.example.patch
0004-add-support-for-ButAutomaticUpgrades-thanks-to-Mode.patch
0005-fix-typos-in-manpage.patch
+0006-support-Release-files-without-MD5Sum.patch
diff -r -u -N reprepro_4.2.0-2/DEBIAN/control reprepro_4.2.0-2squeeze1/DEBIAN/control
--- reprepro_4.2.0-2/DEBIAN/control 2010-10-24 12:35:49.000000000 +0200
+++ reprepro_4.2.0-2squeeze1/DEBIAN/control 2011-02-22 21:01:18.000000000 +0100
@@ -1,8 +1,8 @@
Package: reprepro
-Version: 4.2.0-2
+Version: 4.2.0-2squeeze1
Architecture: amd64
Maintainer: Bernhard R. Link <brlink@debian.org>
-Installed-Size: 992
+Installed-Size: 1056
Depends: libarchive1 (>= 2.0.25), libbz2-1.0, libc6 (>= 2.7), libdb4.8, libgpg-error0 (>= 1.6-1), libgpgme11 (>= 1.2.0), zlib1g (>= 1:1.2.0.2)
Recommends: apt
Suggests: gnupg-agent, inoticoming, lzma, xz-utils
diff -r -u -N reprepro_4.2.0-2/DEBIAN/md5sums reprepro_4.2.0-2squeeze1/DEBIAN/md5sums
--- reprepro_4.2.0-2/DEBIAN/md5sums 2010-10-24 12:35:49.000000000 +0200
+++ reprepro_4.2.0-2squeeze1/DEBIAN/md5sums 2011-02-22 21:01:18.000000000 +0100
@@ -1,13 +1,13 @@
-bddf387d4e112a831457249ce2f8336f usr/bin/changestool
-0096b559d8b7732f41dee1c3c28c8939 usr/bin/reprepro
-efa423f7e298d44dfe772440c0ca7a54 usr/bin/rredtool
+b15e23081cab11900b9c7db404cadaf6 usr/bin/changestool
+f0aa32f9cd1d26f73b20f9322596ecf3 usr/bin/reprepro
+1a9d8383a841db87a27235a2a6e525d6 usr/bin/rredtool
9eebcd5853c2c8b8e8076e2152c8b41e usr/share/doc-base/reprepro
76f3022cae185ec0699f639099af0332 usr/share/doc/reprepro/FAQ.gz
c07ed77f10acb332af8ffe9005d877d0 usr/share/doc/reprepro/NEWS.gz
798f3d5d64ff39786aa586e728574a19 usr/share/doc/reprepro/README
78da8594101caa835230f4a3159389b9 usr/share/doc/reprepro/README.Debian
b37c79554960feb3aeb2236a5e1695ee usr/share/doc/reprepro/TODO
-3300702ac95d85930567ea1b78e84f76 usr/share/doc/reprepro/changelog.Debian.gz
+0eb5c7ef86bd193e041bf390d7d0d6c8 usr/share/doc/reprepro/changelog.Debian.gz
97edbb53d4cdd12777a27574b9a3ee3d usr/share/doc/reprepro/changelog.gz
e4bb1498b6f1d1f09f8ac16d466f20b9 usr/share/doc/reprepro/copyright
1da86e7265847f906394650ca71c95a8 usr/share/doc/reprepro/examples/bzip.example
Binary files reprepro_4.2.0-2/usr/bin/changestool and reprepro_4.2.0-2squeeze1/usr/bin/changestool differ
Binary files reprepro_4.2.0-2/usr/bin/reprepro and reprepro_4.2.0-2squeeze1/usr/bin/reprepro differ
Binary files reprepro_4.2.0-2/usr/bin/rredtool and reprepro_4.2.0-2squeeze1/usr/bin/rredtool differ
diff -r -u -N reprepro_4.2.0-2/usr/share/doc/reprepro/changelog.Debian reprepro_4.2.0-2squeeze1/usr/share/doc/reprepro/changelog.Debian
--- reprepro_4.2.0-2/usr/share/doc/reprepro/changelog.Debian 2010-10-24 11:14:27.000000000 +0200
+++ reprepro_4.2.0-2squeeze1/usr/share/doc/reprepro/changelog.Debian 2011-02-22 20:40:56.000000000 +0100
@@ -1,3 +1,9 @@
+reprepro (4.2.0-2squeeze1) stable-proposed-updates; urgency=low
+
+ * handle Release files without MD5Sum (Closes: 614361)
+
+ -- Bernhard R. Link <brlink@debian.org> Tue, 22 Feb 2011 20:39:37 +0100
+
reprepro (4.2.0-2) unstable; urgency=low
* include sys/stat.h in filecntl.h (Closes: 600982)
Reply to: