Browse Source

Do not show multiple identical apt-cache showsrc entries

Closes: #734922
tags/debian/1.2
Michael Vogt 5 years ago
parent
commit
b0ce7c6530
2 changed files with 43 additions and 3 deletions
  1. +18
    -3
      apt-private/private-show.cc
  2. +25
    -0
      test/integration/test-bug-734922-apt-showsrc-duplicate

+ 18
- 3
apt-private/private-show.cc View File

@@ -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);


+ 25
- 0
test/integration/test-bug-734922-apt-showsrc-duplicate View File

@@ -0,0 +1,25 @@
#!/bin/sh
set -e

TESTDIR=$(readlink -f $(dirname $0))
. $TESTDIR/framework
setupenvironment
configarchitecture 'i386'

# foo is identical, show it only once in showsrc
insertpackage "unstable" "foo" "i386" "1.0"
insertpackage "testing" "foo" "i386" "1.0"
insertsource "unstable" "foo" "i386" "1.0"
insertsource "testing" "foo" "i386" "1.0"

# bar is different, show twice
insertsource "unstable" "bar" "i386" "1.0"
insertsource "testing" "bar" "i386" "2.0"

setupaptarchive

# ensure "foo" is not shown twice
aptcache showsrc foo bar|grep ^Package: > out.txt
testequal "Package: foo
Package: bar
Package: bar" cat out.txt

Loading…
Cancel
Save