summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-01-26 19:17:11 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2016-01-26 19:17:11 +0100
commitd17f2b1b748c8d297474707cfc9706f673ef0346 (patch)
treec34bd4fa12a0b5d8b35ade9978d5018853d3c110
parentb7aa74a1859e3be00f3a20b0956d1cb93d62df5b (diff)
parse version correctly from binary Source field
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
-rw-r--r--apt-pkg/deb/deblistparser.cc2
-rw-r--r--apt-pkg/pkgcache.cc2
-rwxr-xr-xtest/integration/test-apt-get-source20
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