]> git.saurik.com Git - apt.git/commitdiff
use pkgCache::VS instead of pkgDepCache::VS()
authorDavid Kalnischkies <david@kalnischkies.de>
Wed, 3 Feb 2016 11:58:23 +0000 (12:58 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Wed, 3 Feb 2016 12:50:00 +0000 (13:50 +0100)
The later just calls the earlier, but the later needs the fullblown
dependency cache to be initialized, which is a very costly operation and
isn't done anymore that early in the run as we would need to throw away
and rebuild it again after we got all the information about source pkgs.

As we end up with a nullptr for the pkgDepCache, we use a slightly
longer calling convention to make sure that we use the pkgCache
directly, avoiding nullptr induced segfaults and costly operations.

Git-Dch: Ignore
Reported-By: Balint Reczey <balint@balintreczey.hu>
apt-private/private-source.cc
test/integration/test-apt-get-build-dep [deleted file]
test/integration/test-apt-get-build-dep-file [new file with mode: 0755]
test/integration/test-apt-get-source [deleted file]
test/integration/test-apt-source-and-build-dep [new file with mode: 0755]

index c45af6651f1dbe9ae0fad00589e77c403506eb62..c2f5f5d3a0897d69ff6fef86cb3b6a43b7695052 100644 (file)
@@ -152,12 +152,12 @@ static pkgSrcRecords::Parser *FindSrc(const char *Name,
            // pick highest version for the arch unless the user wants
            // something else
            if (ArchTag != "" && VerTag == "" && RelTag == "")
            // pick highest version for the arch unless the user wants
            // something else
            if (ArchTag != "" && VerTag == "" && RelTag == "")
-              if(Cache->VS().CmpVersion(VerTag, Ver.VerStr()) < 0)
+              if(Cache.GetPkgCache()->VS->CmpVersion(VerTag, Ver.VerStr()) < 0)
                  VerTag = Ver.VerStr();
 
            // We match against a concrete version (or a part of this version)
            if (VerTag.empty() == false &&
                  VerTag = Ver.VerStr();
 
            // We match against a concrete version (or a part of this version)
            if (VerTag.empty() == false &&
-                 (fuzzy == true || Cache->VS().CmpVersion(VerTag, Ver.VerStr()) != 0) && // exact match
+                 (fuzzy == true || Cache.GetPkgCache()->VS->CmpVersion(VerTag, Ver.VerStr()) != 0) && // exact match
                  (fuzzy == false || strncmp(VerTag.c_str(), Ver.VerStr(), VerTag.size()) != 0)) // fuzzy match
               continue;
 
                  (fuzzy == false || strncmp(VerTag.c_str(), Ver.VerStr(), VerTag.size()) != 0)) // fuzzy match
               continue;
 
@@ -275,11 +275,11 @@ static pkgSrcRecords::Parser *FindSrc(const char *Name,
 
                     // Ignore all versions which doesn't fit
                     if (VerTag.empty() == false &&
 
                     // Ignore all versions which doesn't fit
                     if (VerTag.empty() == false &&
-                          Cache->VS().CmpVersion(VerTag, Ver) != 0) // exact match
+                          Cache.GetPkgCache()->VS->CmpVersion(VerTag, Ver) != 0) // exact match
                        continue;
 
                     // Newer version or an exact match? Save the hit
                        continue;
 
                     // Newer version or an exact match? Save the hit
-                    if (Last == 0 || Cache->VS().CmpVersion(Version,Ver) < 0) {
+                    if (Last == 0 || Cache.GetPkgCache()->VS->CmpVersion(Version,Ver) < 0) {
                        Last = Parse;
                        Offset = Parse->Offset();
                        Version = Ver;
                        Last = Parse;
                        Offset = Parse->Offset();
                        Version = Ver;
@@ -514,7 +514,7 @@ bool DoSource(CommandLine &CmdL)
       bool const fixBroken = _config->FindB("APT::Get::Fix-Broken", false);
       for (unsigned I = 0; I != J; ++I)
       {
       bool const fixBroken = _config->FindB("APT::Get::Fix-Broken", false);
       for (unsigned I = 0; I != J; ++I)
       {
-        std::string Dir = Dsc[I].Package + '-' + Cache->VS().UpstreamVersion(Dsc[I].Version.c_str());
+        std::string Dir = Dsc[I].Package + '-' + Cache.GetPkgCache()->VS->UpstreamVersion(Dsc[I].Version.c_str());
 
         // Diff only mode only fetches .diff files
         if (_config->FindB("APT::Get::Diff-Only",false) == true ||
 
         // Diff only mode only fetches .diff files
         if (_config->FindB("APT::Get::Diff-Only",false) == true ||
diff --git a/test/integration/test-apt-get-build-dep b/test/integration/test-apt-get-build-dep
deleted file mode 100755 (executable)
index 2cd4f57..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-#!/bin/sh
-set -e
-
-TESTDIR="$(readlink -f "$(dirname "$0")")"
-. "$TESTDIR/framework"
-
-setupenvironment
-configarchitecture 'i386'
-
-insertpackage 'stable' 'debhelper' 'i386' '7'
-insertpackage 'stable' 'build-essential' 'i386' '1'
-insertpackage 'stable' 'build-depends' 'i386' '1'
-insertinstalledpackage 'build-conflict' 'i386' '1'
-
-setupaptarchive
-
-msgmsg 'Test with' 'unsigned dsc'
-cat > 2vcard_0.5-3.dsc <<EOF
-Format: 1.0
-Source: 2vcard
-Binary: 2vcard
-Architecture: all
-Version: 0.5-3
-Maintainer: Martin Albisetti <argentina@gmail.com>
-Uploaders: Marcela Tiznado <mlt@debian.org>
-Standards-Version: 3.8.0
-Build-Depends: debhelper (>= 5.0.37)
-Build-Conflicts: build-conflict (<< 2)
-Checksums-Sha1: 
- b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
- 5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
-Checksums-Sha256: 
- efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
- 82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
-Files: 
- f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
- 1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz
-EOF
-
-test2vcardbuilddep() {
-       testsuccessequal "Note, using file './2vcard_0.5-3.dsc' to get the build dependencies
-Reading package lists...
-Building dependency tree...
-The following packages will be REMOVED:
-  build-conflict
-The following NEW packages will be installed:
-  build-essential debhelper
-0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
-Remv build-conflict [1]
-Inst build-essential (1 stable [i386])
-Inst debhelper (7 stable [i386])
-Conf build-essential (1 stable [i386])
-Conf debhelper (7 stable [i386])" aptget build-dep -s ./2vcard_0.5-3.dsc
-testfailure aptget build-dep --simulate 2vcard_0.5-3.dsc
-cd downloaded
-testsuccess aptget build-dep --simulate ../2vcard_0.5-3.dsc
-testsuccess aptget build-dep --simulate "$(readlink -f ../2vcard_0.5-3.dsc)"
-cd ..
-}
-test2vcardbuilddep
-
-msgmsg 'Test with' 'signed dsc'
-cat > 2vcard_0.5-3.dsc <<EOF
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-Format: 1.0
-Source: 2vcard
-Binary: 2vcard
-Architecture: all
-Version: 0.5-3
-Maintainer: Martin Albisetti <argentina@gmail.com>
-Uploaders: Marcela Tiznado <mlt@debian.org>
-Standards-Version: 3.8.0
-Build-Depends: debhelper (>= 5.0.37)
-Build-Conflicts: build-conflict (<< 2)
-Checksums-Sha1: 
- b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
- 5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
-Checksums-Sha256: 
- efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
- 82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
-Files: 
- f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
- 1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.9 (GNU/Linux)
-
-iEYEARECAAYFAkijKhsACgkQsrBfRdYmq7aA2gCfaOW9riTYVQMx5ajKQVAcctlC
-z2UAn1oXgTai6opwhVfkxrlmJ+iRxzuc
-=4eRd
------END PGP SIGNATURE-----
-EOF
-test2vcardbuilddep
-
-
-msgmsg 'Test with' 'unpacked source dir'
-mkdir -p foo-1.0/debian
-cat > foo-1.0/debian/control <<'EOF'
-Source: apturl
-Section: admin
-Priority: optional
-Maintainer: Michael Vogt <mvo@ubuntu.com>
-Build-Depends: debhelper (>= 7)
-X-Python3-Version: >= 3.2
-Standards-Version: 3.9.3
-
-Package: apturl-common
-Architecture: any
-Depends: ${python3:Depends},
- ${shlibs:Depends},
- ${misc:Depends},
- python3-apt,
- python3-update-manager
-Replaces: apturl (<< 0.3.6ubuntu2)
-Description: install packages using the apt protocol - common data
- AptUrl is a simple graphical application that takes an URL (which follows the
- apt-protocol) as a command line option, parses it and carries out the
- operations that the URL describes (that is, it asks the user if he wants the
- indicated packages to be installed and if the answer is positive does so for
- him).
- .
- This package contains the common data shared between the frontends.
-
-EOF
-
-testsuccessequal "Note, using directory './foo-1.0' to get the build dependencies
-Reading package lists...
-Building dependency tree...
-The following NEW packages will be installed:
-  build-essential debhelper
-0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
-Inst build-essential (1 stable [i386])
-Inst debhelper (7 stable [i386])
-Conf build-essential (1 stable [i386])
-Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./foo-1.0
-testfailure aptget build-dep --simulate foo-1.0
-cd downloaded
-testsuccess aptget build-dep --simulate ../foo-1.0
-testsuccess aptget build-dep --simulate "$(readlink -f ../foo-1.0)"
-cd ..
-
-testfailureequal 'E: Must specify at least one package to check builddeps for' aptget build-dep
-testfailureequal 'E: No architecture information available for armel. See apt.conf(5) APT::Architectures for setup' aptget build-dep --simulate ./foo-1.0 -a armel
-testfailureequal 'Reading package lists...
-E: Unable to find a source package for foo' aptget build-dep --simulate foo
-
-msgmsg 'Test with a dsc' 'with comments'
-cat > comments.dsc <<EOF
-# I love comments
-# I love them so much, I give them their own paragraph
-
-#This is my first package
-Format: 3.0 (native)
-Source: comments
-Binary: comments
-Architecture: all
-Version: 1
-#Version: 2
-Maintainer: Joe Sixpack <joe@example.org>
-Build-Depends: debhelper (>= 5),
-# TODO: add more
-      build-depends (= 1),
-Standards-Version: 3.9.6
-# This is the end…
-
-# or this?
-EOF
-testsuccessequal "Note, using file './comments.dsc' to get the build dependencies
-Reading package lists...
-Building dependency tree...
-The following NEW packages will be installed:
-  build-depends build-essential debhelper
-0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
-Inst build-depends (1 stable [i386])
-Inst build-essential (1 stable [i386])
-Inst debhelper (7 stable [i386])
-Conf build-depends (1 stable [i386])
-Conf build-essential (1 stable [i386])
-Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./comments.dsc
-testsuccessequal "Note, using file './comments.dsc' to get the build dependencies
-Reading package lists...
-Building dependency tree...
-Execute external solver...
-The following NEW packages will be installed:
-  build-depends build-essential debhelper
-0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
-Inst build-depends (1 stable [i386])
-Inst build-essential (1 stable [i386])
-Inst debhelper (7 stable [i386])
-Conf build-depends (1 stable [i386])
-Conf build-essential (1 stable [i386])
-Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./comments.dsc --solver apt
diff --git a/test/integration/test-apt-get-build-dep-file b/test/integration/test-apt-get-build-dep-file
new file mode 100755 (executable)
index 0000000..2cd4f57
--- /dev/null
@@ -0,0 +1,194 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+insertpackage 'stable' 'debhelper' 'i386' '7'
+insertpackage 'stable' 'build-essential' 'i386' '1'
+insertpackage 'stable' 'build-depends' 'i386' '1'
+insertinstalledpackage 'build-conflict' 'i386' '1'
+
+setupaptarchive
+
+msgmsg 'Test with' 'unsigned dsc'
+cat > 2vcard_0.5-3.dsc <<EOF
+Format: 1.0
+Source: 2vcard
+Binary: 2vcard
+Architecture: all
+Version: 0.5-3
+Maintainer: Martin Albisetti <argentina@gmail.com>
+Uploaders: Marcela Tiznado <mlt@debian.org>
+Standards-Version: 3.8.0
+Build-Depends: debhelper (>= 5.0.37)
+Build-Conflicts: build-conflict (<< 2)
+Checksums-Sha1: 
+ b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
+ 5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
+Checksums-Sha256: 
+ efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
+ 82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
+Files: 
+ f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
+ 1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz
+EOF
+
+test2vcardbuilddep() {
+       testsuccessequal "Note, using file './2vcard_0.5-3.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following packages will be REMOVED:
+  build-conflict
+The following NEW packages will be installed:
+  build-essential debhelper
+0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.
+Remv build-conflict [1]
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep -s ./2vcard_0.5-3.dsc
+testfailure aptget build-dep --simulate 2vcard_0.5-3.dsc
+cd downloaded
+testsuccess aptget build-dep --simulate ../2vcard_0.5-3.dsc
+testsuccess aptget build-dep --simulate "$(readlink -f ../2vcard_0.5-3.dsc)"
+cd ..
+}
+test2vcardbuilddep
+
+msgmsg 'Test with' 'signed dsc'
+cat > 2vcard_0.5-3.dsc <<EOF
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: 2vcard
+Binary: 2vcard
+Architecture: all
+Version: 0.5-3
+Maintainer: Martin Albisetti <argentina@gmail.com>
+Uploaders: Marcela Tiznado <mlt@debian.org>
+Standards-Version: 3.8.0
+Build-Depends: debhelper (>= 5.0.37)
+Build-Conflicts: build-conflict (<< 2)
+Checksums-Sha1: 
+ b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
+ 5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
+Checksums-Sha256: 
+ efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
+ 82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
+Files: 
+ f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
+ 1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+iEYEARECAAYFAkijKhsACgkQsrBfRdYmq7aA2gCfaOW9riTYVQMx5ajKQVAcctlC
+z2UAn1oXgTai6opwhVfkxrlmJ+iRxzuc
+=4eRd
+-----END PGP SIGNATURE-----
+EOF
+test2vcardbuilddep
+
+
+msgmsg 'Test with' 'unpacked source dir'
+mkdir -p foo-1.0/debian
+cat > foo-1.0/debian/control <<'EOF'
+Source: apturl
+Section: admin
+Priority: optional
+Maintainer: Michael Vogt <mvo@ubuntu.com>
+Build-Depends: debhelper (>= 7)
+X-Python3-Version: >= 3.2
+Standards-Version: 3.9.3
+
+Package: apturl-common
+Architecture: any
+Depends: ${python3:Depends},
+ ${shlibs:Depends},
+ ${misc:Depends},
+ python3-apt,
+ python3-update-manager
+Replaces: apturl (<< 0.3.6ubuntu2)
+Description: install packages using the apt protocol - common data
+ AptUrl is a simple graphical application that takes an URL (which follows the
+ apt-protocol) as a command line option, parses it and carries out the
+ operations that the URL describes (that is, it asks the user if he wants the
+ indicated packages to be installed and if the answer is positive does so for
+ him).
+ .
+ This package contains the common data shared between the frontends.
+
+EOF
+
+testsuccessequal "Note, using directory './foo-1.0' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  build-essential debhelper
+0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./foo-1.0
+testfailure aptget build-dep --simulate foo-1.0
+cd downloaded
+testsuccess aptget build-dep --simulate ../foo-1.0
+testsuccess aptget build-dep --simulate "$(readlink -f ../foo-1.0)"
+cd ..
+
+testfailureequal 'E: Must specify at least one package to check builddeps for' aptget build-dep
+testfailureequal 'E: No architecture information available for armel. See apt.conf(5) APT::Architectures for setup' aptget build-dep --simulate ./foo-1.0 -a armel
+testfailureequal 'Reading package lists...
+E: Unable to find a source package for foo' aptget build-dep --simulate foo
+
+msgmsg 'Test with a dsc' 'with comments'
+cat > comments.dsc <<EOF
+# I love comments
+# I love them so much, I give them their own paragraph
+
+#This is my first package
+Format: 3.0 (native)
+Source: comments
+Binary: comments
+Architecture: all
+Version: 1
+#Version: 2
+Maintainer: Joe Sixpack <joe@example.org>
+Build-Depends: debhelper (>= 5),
+# TODO: add more
+      build-depends (= 1),
+Standards-Version: 3.9.6
+# This is the end…
+
+# or this?
+EOF
+testsuccessequal "Note, using file './comments.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  build-depends build-essential debhelper
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst build-depends (1 stable [i386])
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./comments.dsc
+testsuccessequal "Note, using file './comments.dsc' to get the build dependencies
+Reading package lists...
+Building dependency tree...
+Execute external solver...
+The following NEW packages will be installed:
+  build-depends build-essential debhelper
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Inst build-depends (1 stable [i386])
+Inst build-essential (1 stable [i386])
+Inst debhelper (7 stable [i386])
+Conf build-depends (1 stable [i386])
+Conf build-essential (1 stable [i386])
+Conf debhelper (7 stable [i386])" aptget build-dep --simulate ./comments.dsc --solver apt
diff --git a/test/integration/test-apt-get-source b/test/integration/test-apt-get-source
deleted file mode 100755 (executable)
index 4b5375d..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/bin/sh
-set -e
-
-TESTDIR="$(readlink -f "$(dirname "$0")")"
-. "$TESTDIR/framework"
-
-setupenvironment
-configarchitecture "i386"
-
-# we need to insert a package into "unstable" so that a Release file is
-# create for the test
-insertpackage 'wheezy' 'unreleated-package' 'all' '1.0'
-
-# a "normal" package with source and binary
-insertpackage 'unstable' 'foo' 'all' '2.0'
-insertsource 'unstable' 'foo' 'all' '2.0'
-
-# binary packages with Source-field
-insertpackage 'unstable,testing' 'bin' 'i386' '3-2+b1' 'Source: bin (3-2)'
-insertsource 'unstable,testing' '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'
-insertsource 'stable' 'foo' 'all' '0.5'
-insertpackage 'stable' 'foo' 'all' '1.0'
-insertsource 'stable' 'foo' 'all' '1.0'
-
-# this packages exists only as sources, add two versions to ensure that
-# apt will pick the higher version number (bts #731853)
-insertsource 'wheezy' 'foo' 'all' '0.0.1'
-insertsource 'wheezy' 'foo' 'all' '0.1'
-
-# the order of these versions is chosen to ensure that
-# * apt will pick the one in the correct release, despite a higher version coming later and
-# * apt will pick the highest version in a release, despite a lower version coming later.
-# (bts #746412)
-insertsource 'stable' 'baz' 'all' '1.0'
-insertsource 'unstable' 'baz' 'all' '2.0'
-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
-
-insertsource 'stable' 'bar' 'any' '1.1' 'Vcs-Browser: https://anonscm.debian.org/cgit/bar/bar.git
-Vcs-Git: git://anonscm.debian.org/bar/bar.git -b debian/experimental'
-
-setupaptarchive
-
-APTARCHIVE=$(readlink -f ./aptarchive)
-
-# normal operation gets highest version number
-HEADER="Reading package lists...
-Building dependency tree..."
-DOWNLOAD1="Need to get 0 B/25 B of source archives.
-'file://${APTARCHIVE}/foo_1.0.dsc' foo_1.0.dsc 11 SHA256:ed7c25c832596339bee13e4e7c45cf49f869b60d2bf57252f18191d75866c2a7
-'file://${APTARCHIVE}/foo_1.0.tar.gz' foo_1.0.tar.gz 14 SHA256:f3da8c6ebc62c8ef2dae439a498dddcdacc1a07f45ff67ad12f44b6e2353c239"
-DOWNLOAD2="Need to get 0 B/25 B of source archives.
-'file://${APTARCHIVE}/foo_2.0.dsc' foo_2.0.dsc 11 SHA256:0fcb803ffbeef26db884625aaf06e75f3eda5c994634980e7c20fd37ed1fc104
-'file://${APTARCHIVE}/foo_2.0.tar.gz' foo_2.0.tar.gz 14 SHA256:ca9b0b828ca22372502af2b80f61f0bd9063910ece9fc34eeaf9d9e31aa8195a"
-DOWNLOAD3="Need to get 0 B/25 B of source archives.
-'file://${APTARCHIVE}/baz_1.0.dsc' baz_1.0.dsc 11 SHA256:322245f56092b466801dda62d79c8687bba9724af6d16d450d655d29e41d3d7b
-'file://${APTARCHIVE}/baz_1.0.tar.gz' baz_1.0.tar.gz 14 SHA256:0870bc73164ff5ba1f52153fdcb48e140137f9c7c122d57592cea136a57f73c0"
-DOWNLOAD4="Need to get 0 B/25 B of source archives.
-'file://${APTARCHIVE}/baz_2.0.dsc' baz_2.0.dsc 11 SHA256:47d062d29070b3f592d1c8aed8c1e7913804bbb67ca1d64877c8219dac5e0420
-'file://${APTARCHIVE}/baz_2.0.tar.gz' baz_2.0.tar.gz 14 SHA256:11c1b202c94a64ab6433d9f0ed5515fce1dc7b20e6bcf51cec9ef8b9455f5a41"
-testsuccessequal "$HEADER
-$DOWNLOAD2" aptget source -q --print-uris foo
-testsuccessequal "$HEADER
-$DOWNLOAD2" aptget source -q --print-uris foo foo
-
-# select by release: suite
-testsuccessequal "$HEADER
-Selected version '1.0' (stable) for foo
-$DOWNLOAD1" aptget source -q --print-uris foo/stable
-testsuccessequal "$HEADER
-Selected version '2.0' (unstable) for foo
-$DOWNLOAD2" aptget source -q --print-uris foo/unstable
-testsuccessequal "$HEADER
-Selected version '1.0' (stable) for foo
-$DOWNLOAD1" aptget source -q --print-uris foo -t stable
-testsuccessequal "$HEADER
-Selected version '2.0' (unstable) for foo
-$DOWNLOAD2" aptget source -q --print-uris foo -t unstable
-testsuccessequal "$HEADER
-Selected version '1.0' (stable) for baz
-$DOWNLOAD3" aptget source -q --print-uris baz -t stable
-
-# select by release: codename
-testsuccessequal "$HEADER
-Selected version '2.0' (sid) for foo
-$DOWNLOAD2" aptget source -q --print-uris foo/sid
-testsuccessequal "$HEADER
-Selected version '2.0' (sid) for foo
-$DOWNLOAD2" aptget source -q --print-uris foo -t sid
-testsuccessequal "$HEADER
-Selected version '2.0' (sid) for baz
-$DOWNLOAD4" aptget source -q --print-uris baz -t sid
-
-# select by version
-testsuccessequal "$HEADER
-$DOWNLOAD1" aptget source -q --print-uris foo=1.0
-
-# select by release with no binary package (Bug#731102) but ensure to get
-# highest version
-DOWNLOAD01="Need to get 0 B/25 B of source archives.
-'file://${APTARCHIVE}/foo_0.1.dsc' foo_0.1.dsc 11 SHA256:72af24b0290fe1d13a3e25fddd2633e43c87ff79d249bc850009e47bcce73565
-'file://${APTARCHIVE}/foo_0.1.tar.gz' foo_0.1.tar.gz 14 SHA256:ec748ad88a71f98bfdc012e1a7632377d05fe3ebbf9c0922e0691fe4d79c0585"
-testsuccessequal "$HEADER
-Selected version '0.1' (wheezy) for foo
-$DOWNLOAD01" aptget source -q --print-uris foo/wheezy
-
-# unavailable one
-testfailureequal "$HEADER
-E: Can not find version '9.9-not-there' of package 'foo'
-E: Unable to find a source package for foo" aptget source -q --print-uris foo=9.9-not-there
-
-# version and release
-DOWNLOAD001="Need to get 0 B/29 B of source archives.
-'file://${APTARCHIVE}/foo_0.0.1.dsc' foo_0.0.1.dsc 13 SHA256:649dfe03bbb70cebdfe7c6bf9036f9f2472510b8f52e823bdf5ade362ebaa76f
-'file://${APTARCHIVE}/foo_0.0.1.tar.gz' foo_0.0.1.tar.gz 16 SHA256:ab7ba789d178362ecc808e49705e2338988a7f5b9410ec11a6c9555c017de907"
-testsuccessequal "$HEADER
-$DOWNLOAD001" aptget source -q --print-uris -t unstable foo=0.0.1
-
-testsuccessequal "$HEADER
-Need to get 0 B/25 B of source archives.
-Fetch source foo" aptget source -q -s foo
-
-testfailureequal 'Reading package lists...
-Building dependency tree...
-E: Must specify at least one package to fetch source for' aptget source
-
-testsuccessequal "Reading package lists...
-Building dependency tree...
-NOTICE: 'bar' packaging is maintained in the 'Git' version control system at:
-git://anonscm.debian.org/bar/bar.git -b debian/experimental
-Please use:
-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
diff --git a/test/integration/test-apt-source-and-build-dep b/test/integration/test-apt-source-and-build-dep
new file mode 100755 (executable)
index 0000000..a813cfe
--- /dev/null
@@ -0,0 +1,195 @@
+#!/bin/sh
+set -e
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
+
+setupenvironment
+configarchitecture 'i386'
+
+# we need to insert a package into "unstable" so that a Release file is
+# create for the test
+insertpackage 'wheezy' 'build-essential' 'all' '1.0'
+
+# a "normal" package with source and binary
+insertpackage 'unstable' 'foo' 'all' '2.0'
+insertsource 'unstable' 'foo' 'all' '2.0'
+
+# binary packages with Source-field
+insertpackage 'unstable,testing' 'bin' 'i386' '3-2+b1' 'Source: bin (3-2)'
+insertsource 'unstable,testing' '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'
+insertsource 'stable' 'foo' 'all' '0.5'
+insertpackage 'stable' 'foo' 'all' '1.0'
+insertsource 'stable' 'foo' 'all' '1.0'
+
+# this packages exists only as sources, add two versions to ensure that
+# apt will pick the higher version number (bts #731853)
+insertsource 'wheezy' 'foo' 'all' '0.0.1'
+insertsource 'wheezy' 'foo' 'all' '0.1'
+
+# the order of these versions is chosen to ensure that
+# * apt will pick the one in the correct release, despite a higher version coming later and
+# * apt will pick the highest version in a release, despite a lower version coming later.
+# (bts #746412)
+insertsource 'stable' 'baz' 'all' '1.0'
+insertsource 'unstable' 'baz' 'all' '2.0'
+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
+
+insertsource 'stable' 'bar' 'any' '1.1' 'Vcs-Browser: https://anonscm.debian.org/cgit/bar/bar.git
+Vcs-Git: git://anonscm.debian.org/bar/bar.git -b debian/experimental'
+
+setupaptarchive
+
+APTARCHIVE=$(readlink -f ./aptarchive)
+
+# normal operation gets highest version number
+HEADER="Reading package lists...
+Building dependency tree..."
+DOWNLOAD1="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/foo_1.0.dsc' foo_1.0.dsc 11 SHA256:ed7c25c832596339bee13e4e7c45cf49f869b60d2bf57252f18191d75866c2a7
+'file://${APTARCHIVE}/foo_1.0.tar.gz' foo_1.0.tar.gz 14 SHA256:f3da8c6ebc62c8ef2dae439a498dddcdacc1a07f45ff67ad12f44b6e2353c239"
+DOWNLOAD2="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/foo_2.0.dsc' foo_2.0.dsc 11 SHA256:0fcb803ffbeef26db884625aaf06e75f3eda5c994634980e7c20fd37ed1fc104
+'file://${APTARCHIVE}/foo_2.0.tar.gz' foo_2.0.tar.gz 14 SHA256:ca9b0b828ca22372502af2b80f61f0bd9063910ece9fc34eeaf9d9e31aa8195a"
+DOWNLOAD3="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/baz_1.0.dsc' baz_1.0.dsc 11 SHA256:322245f56092b466801dda62d79c8687bba9724af6d16d450d655d29e41d3d7b
+'file://${APTARCHIVE}/baz_1.0.tar.gz' baz_1.0.tar.gz 14 SHA256:0870bc73164ff5ba1f52153fdcb48e140137f9c7c122d57592cea136a57f73c0"
+DOWNLOAD4="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/baz_2.0.dsc' baz_2.0.dsc 11 SHA256:47d062d29070b3f592d1c8aed8c1e7913804bbb67ca1d64877c8219dac5e0420
+'file://${APTARCHIVE}/baz_2.0.tar.gz' baz_2.0.tar.gz 14 SHA256:11c1b202c94a64ab6433d9f0ed5515fce1dc7b20e6bcf51cec9ef8b9455f5a41"
+testsuccessequal "$HEADER
+$DOWNLOAD2" apt source -q --print-uris foo
+testsuccessequal "$HEADER
+$DOWNLOAD2" apt source -q --print-uris foo foo
+getbuilddep() {
+       echo 'Reading package lists...'
+       if [ -n "$2" ]; then
+               echo "$2"
+       fi
+       echo "${1} has no build depends.
+Reading package lists...
+Building dependency tree...
+The following NEW packages will be installed:
+  build-essential
+0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
+Inst build-essential (1.0 wheezy [all])
+Conf build-essential (1.0 wheezy [all])"
+}
+testsuccessequal "$(getbuilddep 'foo')" apt build-dep foo -s
+
+# select by release: suite
+testsuccessequal "$HEADER
+Selected version '1.0' (stable) for foo
+$DOWNLOAD1" apt source -q --print-uris foo/stable
+testsuccessequal "$(getbuilddep 'foo' "Selected version '1.0' (stable) for foo")" apt build-dep foo/stable -s
+testsuccessequal "$HEADER
+Selected version '2.0' (unstable) for foo
+$DOWNLOAD2" apt source -q --print-uris foo/unstable
+testsuccessequal "$(getbuilddep 'foo' "Selected version '2.0' (unstable) for foo")" apt build-dep foo/unstable -s
+testsuccessequal "$HEADER
+Selected version '1.0' (stable) for foo
+$DOWNLOAD1" apt source -q --print-uris foo -t stable
+testsuccessequal "$(getbuilddep 'foo' "Selected version '1.0' (stable) for foo")" apt build-dep foo -t stable -s
+testsuccessequal "$HEADER
+Selected version '2.0' (unstable) for foo
+$DOWNLOAD2" apt source -q --print-uris foo -t unstable
+testsuccessequal "$(getbuilddep 'foo' "Selected version '2.0' (unstable) for foo")" apt build-dep foo -t unstable -s
+testsuccessequal "$HEADER
+Selected version '1.0' (stable) for baz
+$DOWNLOAD3" apt source -q --print-uris baz -t stable
+testsuccessequal "$(getbuilddep 'baz' "Selected version '1.0' (stable) for baz")" apt build-dep baz -t stable -s
+
+# select by release: codename
+testsuccessequal "$HEADER
+Selected version '2.0' (sid) for foo
+$DOWNLOAD2" apt source -q --print-uris foo/sid
+testsuccessequal "$(getbuilddep 'foo' "Selected version '2.0' (sid) for foo")" apt build-dep foo/sid -s
+testsuccessequal "$HEADER
+Selected version '2.0' (sid) for foo
+$DOWNLOAD2" apt source -q --print-uris foo -t sid
+testsuccessequal "$(getbuilddep 'foo' "Selected version '2.0' (sid) for foo")" apt build-dep foo -t sid -s
+testsuccessequal "$HEADER
+Selected version '2.0' (sid) for baz
+$DOWNLOAD4" apt source -q --print-uris baz -t sid
+testsuccessequal "$(getbuilddep 'baz' "Selected version '2.0' (sid) for baz")" apt build-dep baz -t sid -s
+
+# select by version
+testsuccessequal "$HEADER
+$DOWNLOAD1" apt source -q --print-uris foo=1.0
+testsuccessequal "$(getbuilddep 'foo')" apt build-dep foo=1.0 -s
+
+# select by release with no binary package (Bug#731102) but ensure to get
+# highest version
+DOWNLOAD01="Need to get 0 B/25 B of source archives.
+'file://${APTARCHIVE}/foo_0.1.dsc' foo_0.1.dsc 11 SHA256:72af24b0290fe1d13a3e25fddd2633e43c87ff79d249bc850009e47bcce73565
+'file://${APTARCHIVE}/foo_0.1.tar.gz' foo_0.1.tar.gz 14 SHA256:ec748ad88a71f98bfdc012e1a7632377d05fe3ebbf9c0922e0691fe4d79c0585"
+testsuccessequal "$HEADER
+Selected version '0.1' (wheezy) for foo
+$DOWNLOAD01" apt source -q --print-uris foo/wheezy
+testsuccessequal "$(getbuilddep 'foo' "Selected version '0.1' (wheezy) for foo")" apt build-dep foo/wheezy -s
+
+# unavailable one
+testfailureequal "$HEADER
+E: Can not find version '9.9-not-there' of package 'foo'
+E: Unable to find a source package for foo" apt source -q --print-uris foo=9.9-not-there
+testfailureequal "Reading package lists...
+E: Can not find version '9.9-not-there' of package 'foo'
+E: Unable to find a source package for foo=9.9-not-there" apt build-dep -s foo=9.9-not-there
+
+# version and release
+DOWNLOAD001="Need to get 0 B/29 B of source archives.
+'file://${APTARCHIVE}/foo_0.0.1.dsc' foo_0.0.1.dsc 13 SHA256:649dfe03bbb70cebdfe7c6bf9036f9f2472510b8f52e823bdf5ade362ebaa76f
+'file://${APTARCHIVE}/foo_0.0.1.tar.gz' foo_0.0.1.tar.gz 16 SHA256:ab7ba789d178362ecc808e49705e2338988a7f5b9410ec11a6c9555c017de907"
+testsuccessequal "$HEADER
+$DOWNLOAD001" apt source -q --print-uris -t unstable foo=0.0.1
+testsuccessequal "$(getbuilddep 'foo')" apt build-dep foo=0.0.1 -s
+
+testsuccessequal "$HEADER
+Need to get 0 B/25 B of source archives.
+Fetch source foo" apt source -q -s foo
+testsuccessequal "$(getbuilddep 'foo')" apt build-dep foo -s
+
+testfailureequal 'Reading package lists...
+Building dependency tree...
+E: Must specify at least one package to fetch source for' apt source
+testfailureequal 'E: Must specify at least one package to check builddeps for' apt build-dep
+
+testsuccessequal "Reading package lists...
+Building dependency tree...
+NOTICE: 'bar' packaging is maintained in the 'Git' version control system at:
+git://anonscm.debian.org/bar/bar.git -b debian/experimental
+Please use:
+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" apt source bar -s
+testsuccessequal "$(getbuilddep 'bar')" apt build-dep bar -s
+
+testsuccessequal "$HEADER
+Need to get 0 B/25 B of source archives.
+Fetch source bin" apt source bin -s -q
+testsuccessequal "$(getbuilddep 'bin')" apt build-dep bin -s
+testsuccessequal "$HEADER
+Selected version '3-2' (unstable) for bin
+Need to get 0 B/25 B of source archives.
+Fetch source bin" apt source bin/unstable -s -q
+testsuccessequal "$(getbuilddep 'bin' "Selected version '3-2' (unstable) for bin")" apt build-dep bin/unstable -s
+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" apt source bin/stable -s -q
+testsuccessequal "$(getbuilddep 'bin-backport' "Picking 'bin-backport' as source package instead of 'bin'
+Selected version '2-2' (stable) for bin-backport")" apt build-dep bin/stable -s