[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#616464: reprepro for 6.0.2



Package: release.debian.org
User: release.debian.org@packages.debian.org
UserTags: pu

* Philipp Kern <pkern@debian.org> [110303 20:54]:
> On Tue, Feb 22, 2011 at 09:36:34PM +0100, Bernhard R. Link wrote:
> > 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?
>
> we'd like to delay this for r2 to get all the checksum stuff in at once and
> give it more testing in, well, testing and unstable.
>
> Would you mind filing a bug against release.debian.org about this, so
> that we don't forget it?  Thanks.

Reattached are the diff files and the .debian.tar.gz

	Bernhard R. Link
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)
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

Attachment: reprepro_4.2.0-2squeeze1.debian.tar.gz
Description: Binary data


Reply to: