[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: