From d17f2b1b748c8d297474707cfc9706f673ef0346 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 26 Jan 2016 19:17:11 +0100 Subject: parse version correctly from binary Source field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In commit a221efc331693f8905da870141756c892911c433 I promoted the source package name and version to the binary cache for faster access by e.g. EDSP, but due to changing the interpretation length to soon we always ignored the version part of the Source field, so that packages ended up having the binary version as source version – which while usually just fine it is wrong for binary rebuilds. Closes: 812492 --- apt-pkg/deb/deblistparser.cc | 2 +- apt-pkg/pkgcache.cc | 2 +- test/integration/test-apt-get-source | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 090673db2..63343005b 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -154,7 +154,6 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver) if (Space != NULL) { - Stop = Space; const char * const Open = (const char * const) memchr(Space, '(', Stop - Space); if (likely(Open != NULL)) { @@ -169,6 +168,7 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver) } } } + Stop = Space; } std::string const pkgname(Start, Stop - Start); diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index d6dd169bb..c9c338e1e 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -59,7 +59,7 @@ pkgCache::Header::Header() /* Whenever the structures change the major version should be bumped, whenever the generator changes the minor version should be bumped. */ APT_HEADER_SET(MajorVersion, 10); - APT_HEADER_SET(MinorVersion, 4); + APT_HEADER_SET(MinorVersion, 5); APT_HEADER_SET(Dirty, false); APT_HEADER_SET(HeaderSz, sizeof(pkgCache::Header)); diff --git a/test/integration/test-apt-get-source b/test/integration/test-apt-get-source index 27395ab3b..10a190b6c 100755 --- a/test/integration/test-apt-get-source +++ b/test/integration/test-apt-get-source @@ -15,6 +15,12 @@ insertpackage 'wheezy' 'unreleated-package' 'all' '1.0' insertpackage 'unstable' 'foo' 'all' '2.0' insertsource 'unstable' 'foo' 'all' '2.0' +# binary packages with Source-field +insertpackage 'unstable' 'bin' 'i386' '3-2+b1' 'Source: bin (3-2)' +insertsource 'unstable' 'bin' 'any' '3-2' +insertpackage 'stable' 'bin' 'i386' '2-2+b1' 'Source: bin-backport (2-2)' +insertsource 'stable' 'bin-backport' 'any' '2-2' + # its possible to have multiple src versions in the sources file, ensure # to pick the correct one in this case (bts #731853) insertsource 'stable' 'foo' 'all' '1.5' @@ -37,6 +43,7 @@ insertsource 'unstable' 'baz' 'all' '1.5' # ensure we really have the situation we wanted (first 2.0 is foo above) testequal 'Version: 2.0 +Version: 3-2 Version: 2.0 Version: 1.5' grep '^Version:' aptarchive/dists/unstable/main/source/Sources @@ -137,3 +144,16 @@ git clone git://anonscm.debian.org/bar/bar.git -b debian/experimental to retrieve the latest (possibly unreleased) updates to the package. Need to get 0 B/25 B of source archives. Fetch source bar" aptget source bar -s + +testsuccessequal "$HEADER +Need to get 0 B/25 B of source archives. +Fetch source bin" aptget source bin -s -q +testsuccessequal "$HEADER +Selected version '3-2' (unstable) for bin +Need to get 0 B/25 B of source archives. +Fetch source bin" aptget source bin/unstable -s -q +testsuccessequal "$HEADER +Picking 'bin-backport' as source package instead of 'bin' +Selected version '2-2' (stable) for bin-backport +Need to get 0 B/43 B of source archives. +Fetch source bin-backport" aptget source bin/stable -s -q -- cgit v1.2.3