summaryrefslogtreecommitdiff
path: root/apt-private/private-show.cc
diff options
context:
space:
mode:
authorMichael Vogt <mvo@ubuntu.com>2016-01-14 09:28:47 +0100
committerMichael Vogt <mvo@ubuntu.com>2016-01-14 09:28:47 +0100
commitb0ce7c65309585d4b9752bb571a0e616036eb162 (patch)
treeb41ea70d933f35eac3f19774e78a7de8982cd8fc /apt-private/private-show.cc
parent7d2794a20bdab9b848bf5b4e88d73527405bad54 (diff)
Do not show multiple identical apt-cache showsrc entries
Closes: #734922
Diffstat (limited to 'apt-private/private-show.cc')
-rw-r--r--apt-private/private-show.cc21
1 files changed, 18 insertions, 3 deletions
diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc
index c2517e130..6fb3791f8 100644
--- a/apt-private/private-show.cc
+++ b/apt-private/private-show.cc
@@ -299,6 +299,14 @@ bool ShowPackage(CommandLine &CmdL) /*{{{*/
return true;
}
/*}}}*/
+// XXX: move to hashes.h: HashString::FromString() ? /*{{{*/
+std::string Sha1FromString(std::string input)
+{
+ SHA1Summation sha1;
+ sha1.Add(input.c_str(), input.length());
+ return sha1.Result().Value();
+}
+ /*}}}*/
bool ShowSrcPackage(CommandLine &CmdL) /*{{{*/
{
pkgCacheFile CacheFile;
@@ -312,6 +320,8 @@ bool ShowSrcPackage(CommandLine &CmdL) /*{{{*/
return false;
bool found = false;
+ // avoid showing identical records
+ std::set<std::string> seen;
for (const char **I = CmdL.FileList + 1; *I != 0; I++)
{
SrcRecs.Restart();
@@ -323,9 +333,14 @@ bool ShowSrcPackage(CommandLine &CmdL) /*{{{*/
if (_config->FindB("APT::Cache::Only-Source", false) == true)
if (Parse->Package() != *I)
continue;
- std::cout << Parse->AsStr() << std::endl;;
- found = true;
- found_this = true;
+ std::string sha1str = Sha1FromString(Parse->AsStr());
+ if (std::find(seen.begin(), seen.end(), sha1str) == seen.end())
+ {
+ std::cout << Parse->AsStr() << std::endl;;
+ found = true;
+ found_this = true;
+ seen.insert(sha1str);
+ }
}
if (found_this == false) {
_error->Warning(_("Unable to locate package %s"),*I);