Bug#335925: apt-cache rdepends shows duplicated reverse dependencies/dependants
Hi,
I tried to come up with a fix. Please find the attached patch and give
me your feedback.
Regards,
Ishan
=== modified file 'cmdline/apt-cache.cc'
--- cmdline/apt-cache.cc 2010-12-07 14:47:58 +0000
+++ cmdline/apt-cache.cc 2011-02-08 13:20:53 +0000
@@ -633,45 +633,50 @@
pkgCache::PkgIterator Trg = RevDepends ? D.ParentPkg() : D.TargetPkg();
if((Installed && Trg->CurrentVer != 0) || !Installed)
- {
-
- if ((D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or && ShowOnlyFirstOr == false)
- cout << " |";
- else
- cout << " ";
-
- // Show the package
- if (ShowDepType == true)
- cout << D.DepType() << ": ";
- if (Trg->VersionList == 0)
- cout << "<" << Trg.FullName(true) << ">" << endl;
- else
- cout << Trg.FullName(true) << endl;
-
- if (Recurse == true && Shown[Trg->ID] == false)
- {
- Shown[Trg->ID] = true;
- verset.insert(APT::VersionSet::FromPackage(CacheFile, Trg, APT::VersionSet::CANDIDATE, helper));
- }
-
- }
+ {
+
+ string s;
+ if ((D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or && ShowOnlyFirstOr == false)
+ s = " |";
+ else
+ s = " ";
+
+ // Show the package
+ if (Shown[Trg->ID] == false)
+ {
+ if (ShowDepType == true)
+ cout << s << D.DepType() << ": ";
+ if (Trg->VersionList == 0)
+ cout << s << "<" << Trg.FullName(true) << ">" << endl;
+ else
+ cout << s << Trg.FullName(true) << endl;
+ if (Recurse == true)
+ {
+ verset.insert(APT::VersionSet::FromPackage(CacheFile, Trg, APT::VersionSet::CANDIDATE, helper));
+ }
+ Shown[Trg->ID] = true;
+ }
+
+ }
// Display all solutions
SPtrArray<pkgCache::Version *> List = D.AllTargets();
pkgPrioSortList(*Cache,List);
for (pkgCache::Version **I = List; *I != 0; I++)
{
- pkgCache::VerIterator V(*Cache,*I);
+ pkgCache::VerIterator V(*Cache,*I);
if (V != Cache->VerP + V.ParentPkg()->VersionList ||
- V->ParentPkg == D->Package)
- continue;
- cout << " " << V.ParentPkg().FullName(true) << endl;
-
- if (Recurse == true && Shown[V.ParentPkg()->ID] == false)
- {
- Shown[V.ParentPkg()->ID] = true;
- verset.insert(APT::VersionSet::FromPackage(CacheFile, V.ParentPkg(), APT::VersionSet::CANDIDATE, helper));
- }
+ V->ParentPkg == D->Package)
+ continue;
+ if (Shown[V.ParentPkg()->ID] == false)
+ {
+ cout << " " << V.ParentPkg().FullName(true) << endl;
+ if (Recurse == true)
+ {
+ verset.insert(APT::VersionSet::FromPackage(CacheFile, V.ParentPkg(), APT::VersionSet::CANDIDATE, helper));
+ }
+ Shown[V.ParentPkg()->ID] = true;
+ }
}
if (ShowOnlyFirstOr == true)
Reply to: