summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <mvo@debian.org>2015-08-18 20:39:59 +0200
committerMichael Vogt <mvo@debian.org>2015-08-18 20:39:59 +0200
commita8275acf87cf15992e6b89694d6276e0a5e529b9 (patch)
tree44e4264e28d8a932a1298f71b316fd01359fb39c
parent5b1997c095acf183077ec49b2a8cbb1174e3c280 (diff)
Add support for "apt-cache showsrc --only-source srcpkgname"
Thanks: Steve Slangasek for the suggestion Closes: 695633
-rw-r--r--apt-private/private-cmndline.cc6
-rw-r--r--cmdline/apt-cache.cc4
-rw-r--r--doc/apt-cache.8.xml9
-rw-r--r--test/integration/framework3
-rwxr-xr-xtest/integration/test-apt-cache-showsrc31
5 files changed, 48 insertions, 5 deletions
diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc
index 3a1564b23..1072b9a78 100644
--- a/apt-private/private-cmndline.cc
+++ b/apt-private/private-cmndline.cc
@@ -70,7 +70,11 @@ static bool addArgumentsAPTCache(std::vector<CommandLine::Args> &Args, char cons
{
addArg('i', "important", "APT::Cache::Important", 0);
}
- else if (CmdMatches("gencaches", "showsrc", "showpkg", "stats", "dump",
+ else if (CmdMatches("showsrc"))
+ {
+ addArg(0,"only-source","APT::Cache::Only-Source",0);
+ }
+ else if (CmdMatches("gencaches", "showpkg", "stats", "dump",
"dumpavail", "showauto", "policy", "madison"))
;
else
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc
index f7abb823d..050508663 100644
--- a/cmdline/apt-cache.cc
+++ b/cmdline/apt-cache.cc
@@ -1607,6 +1607,10 @@ static bool ShowSrcPackage(CommandLine &CmdL)
pkgSrcRecords::Parser *Parse;
unsigned found_this = 0;
while ((Parse = SrcRecs.Find(*I,false)) != 0) {
+ // SrcRecs.Find() will find both binary and source names
+ if (_config->FindB("APT::Cache::Only-Source", false) == true)
+ if (Parse->Package() != *I)
+ continue;
cout << Parse->AsStr() << endl;;
found++;
found_this++;
diff --git a/doc/apt-cache.8.xml b/doc/apt-cache.8.xml
index a8f1b4586..b649149af 100644
--- a/doc/apt-cache.8.xml
+++ b/doc/apt-cache.8.xml
@@ -135,9 +135,12 @@ Reverse Provides:
</varlistentry>
<varlistentry><term><option>showsrc</option> <option><replaceable>&synopsis-pkg;</replaceable>…</option></term>
- <listitem><para><literal>showsrc</literal> displays all the source package records that match
- the given package names. All versions are shown, as well as all
- records that declare the name to be a binary package.</para></listitem>
+ <listitem><para><literal>showsrc</literal> displays all the
+ source package records that match the given package names. All
+ versions are shown, as well as all records that declare the name
+ to be a binary package. Use <option>--only-source</option> to
+ display only source package names.
+ </para></listitem>
</varlistentry>
<varlistentry><term><option>dump</option></term>
diff --git a/test/integration/framework b/test/integration/framework
index b443f2a7b..d9282eede 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -794,6 +794,7 @@ insertsource() {
local ARCH="$3"
local VERSION="$4"
local DEPENDENCIES="$5"
+ local BINARY="${6:-$NAME}"
local ARCHS=""
local SPATH="aptarchive/dists/${RELEASE}/main/source"
mkdir -p $SPATH
@@ -801,7 +802,7 @@ insertsource() {
local DSCFILE="${NAME}_${VERSION}.dsc"
local TARFILE="${NAME}_${VERSION}.tar.gz"
echo "Package: $NAME
-Binary: $NAME
+Binary: $BINARY
Version: $VERSION
Maintainer: Joe Sixpack <joe@example.org>
Architecture: $ARCH" >> $FILE
diff --git a/test/integration/test-apt-cache-showsrc b/test/integration/test-apt-cache-showsrc
new file mode 100755
index 000000000..319b4f2f2
--- /dev/null
+++ b/test/integration/test-apt-cache-showsrc
@@ -0,0 +1,31 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+
+setupenvironment
+configarchitecture "i386"
+
+# we have a foo source package
+insertsource 'unstable' 'foo' 'all' '1.0' '' 'foo-binary'
+
+# and a similar one that builds a foo binary package
+insertsource 'unstable' 'unreleated' 'all' '1.0' '' 'foo'
+
+# just here to workaround the need for a authenticated package
+insertpackage 'unstable' 'workaround' 'all' '1.0'
+
+setupaptarchive
+
+# by default apt-cache showsrc will look into "binary" and "source" names
+# and show all matches
+aptcache showsrc foo > output.txt
+testsuccess grep "Package: foo" output.txt
+testsuccess grep "Package: unreleated" output.txt
+
+# by default apt-cache showsrc will look into "binary" and "source" names
+# and show all matches
+aptcache showsrc --only-source foo > output.txt
+testsuccess grep "Package: foo" output.txt
+testfailure grep "Package: unreleated" output.txt