RW.push_back(pkgTagSection::Tag::Remove("Description"));
RW.push_back(pkgTagSection::Tag::Remove("Description-md5"));
// improve
+ RW.push_back(pkgTagSection::Tag::Rewrite("Package", V.ParentPkg().FullName(true)));
RW.push_back(pkgTagSection::Tag::Rewrite("Installed-Size", installed_size));
RW.push_back(pkgTagSection::Tag::Remove("Size"));
RW.push_back(pkgTagSection::Tag::Rewrite("Download-Size", package_size));
return true;
}
/*}}}*/
+static std::string Sha1FromString(std::string const &input) /*{{{*/
+{
+ // XXX: move to hashes.h: HashString::FromString() ?
+ SHA1Summation sha1;
+ sha1.Add(input.c_str(), input.length());
+ return sha1.Result().Value();
+}
+ /*}}}*/
bool ShowSrcPackage(CommandLine &CmdL) /*{{{*/
{
pkgCacheFile CacheFile;
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();
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);
if (unlikely(Cache == NULL || Plcy == NULL || SrcList == NULL))
return false;
- bool OldPolicy = _config->FindI("APT::Policy", 1) < 1;
-
// Print out all of the package files
if (CmdL.FileList[1] == 0)
{
pkgCache::PkgIterator I = Cache->PkgBegin();
for (;I.end() != true; ++I)
{
- // Old code for debugging
- if (OldPolicy)
- {
- if (Plcy->GetPriority(I) == 0)
- continue;
-
- // Print the package name and the version we are forcing to
- std::cout << " " << I.FullName(true) << " -> ";
-
- pkgCache::VerIterator V = Plcy->GetMatch(I);
- if (V.end() == true)
- std::cout << _("(not found)") << std::endl;
- else
- std::cout << V.VerStr() << std::endl;
-
- continue;
- }
- // New code
- for (pkgCache::VerIterator V = I.VersionList(); !V.end(); V++) {
+ for (pkgCache::VerIterator V = I.VersionList(); !V.end(); ++V) {
auto Prio = Plcy->GetPriority(V, false);
if (Prio == 0)
continue;
else
std::cout << V.VerStr() << std::endl;
- // Pinned version
- if (OldPolicy && Plcy->GetPriority(Pkg) != 0)
- {
- std::cout << _(" Package pin: ");
- V = Plcy->GetMatch(Pkg);
- if (V.end() == true)
- std::cout << _("(not found)") << std::endl;
- else
- std::cout << V.VerStr() << std::endl;
- }
-
// Show the priority tables
std::cout << _(" Version table:") << std::endl;
for (V = Pkg.VersionList(); V.end() == false; ++V)
std::cout << " *** " << V.VerStr();
else
std::cout << " " << V.VerStr();
- if (_config->FindI("APT::Policy", 1) < 1)
- std::cout << " " << Plcy->GetPriority(Pkg) << std::endl;
- else
- std::cout << " " << Plcy->GetPriority(V) << std::endl;
+
+ std::cout << " " << Plcy->GetPriority(V) << std::endl;
for (pkgCache::VerFileIterator VF = V.FileList(); VF.end() == false; ++VF)
{
// Locate the associated index files so we can derive a description