From a8275acf87cf15992e6b89694d6276e0a5e529b9 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 18 Aug 2015 20:39:59 +0200 Subject: Add support for "apt-cache showsrc --only-source srcpkgname" Thanks: Steve Slangasek for the suggestion Closes: 695633 --- apt-private/private-cmndline.cc | 6 +++++- cmdline/apt-cache.cc | 4 ++++ doc/apt-cache.8.xml | 9 ++++++--- test/integration/framework | 3 ++- test/integration/test-apt-cache-showsrc | 31 +++++++++++++++++++++++++++++++ 5 files changed, 48 insertions(+), 5 deletions(-) create mode 100755 test/integration/test-apt-cache-showsrc 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 &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: - showsrc 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. + showsrc 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 to + display only source package names. + 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 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 -- cgit v1.2.3-70-g09d2