|
|
@@ -344,129 +344,141 @@ bool ShowList(ostream &out,string Title,string List,string VersionsList)
|
|
|
Depends: libldap2 (>= 2.0.2-2) but it is not going to be installed
|
|
|
Depends: libsasl7 but it is not going to be installed
|
|
|
*/
|
|
|
-void ShowBroken(ostream &out,CacheFile &Cache,bool Now)
|
|
|
+static void ShowBrokenPackage(ostream &out, pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg, bool const Now)
|
|
|
{
|
|
|
- if (Cache->BrokenCount() == 0)
|
|
|
+ if (Now == true)
|
|
|
+ {
|
|
|
+ if ((*Cache)[Pkg].NowBroken() == false)
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if ((*Cache)[Pkg].InstBroken() == false)
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Print out each package and the failed dependencies
|
|
|
+ out << " " << Pkg.FullName(true) << " :";
|
|
|
+ unsigned const Indent = Pkg.FullName(true).size() + 3;
|
|
|
+ bool First = true;
|
|
|
+ pkgCache::VerIterator Ver;
|
|
|
+
|
|
|
+ if (Now == true)
|
|
|
+ Ver = Pkg.CurrentVer();
|
|
|
+ else
|
|
|
+ Ver = (*Cache)[Pkg].InstVerIter(*Cache);
|
|
|
+
|
|
|
+ if (Ver.end() == true)
|
|
|
+ {
|
|
|
+ out << endl;
|
|
|
return;
|
|
|
+ }
|
|
|
|
|
|
- out << _("The following packages have unmet dependencies:") << endl;
|
|
|
- for (unsigned J = 0; J < Cache->Head().PackageCount; J++)
|
|
|
+ for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false;)
|
|
|
{
|
|
|
- pkgCache::PkgIterator I(Cache,Cache.List[J]);
|
|
|
-
|
|
|
+ // Compute a single dependency element (glob or)
|
|
|
+ pkgCache::DepIterator Start;
|
|
|
+ pkgCache::DepIterator End;
|
|
|
+ D.GlobOr(Start,End); // advances D
|
|
|
+
|
|
|
+ if ((*Cache)->IsImportantDep(End) == false)
|
|
|
+ continue;
|
|
|
+
|
|
|
if (Now == true)
|
|
|
{
|
|
|
- if (Cache[I].NowBroken() == false)
|
|
|
+ if (((*Cache)[End] & pkgDepCache::DepGNow) == pkgDepCache::DepGNow)
|
|
|
continue;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if (Cache[I].InstBroken() == false)
|
|
|
+ if (((*Cache)[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
- // Print out each package and the failed dependencies
|
|
|
- out << " " << I.FullName(true) << " :";
|
|
|
- unsigned const Indent = I.FullName(true).size() + 3;
|
|
|
- bool First = true;
|
|
|
- pkgCache::VerIterator Ver;
|
|
|
-
|
|
|
- if (Now == true)
|
|
|
- Ver = I.CurrentVer();
|
|
|
- else
|
|
|
- Ver = Cache[I].InstVerIter(Cache);
|
|
|
-
|
|
|
- if (Ver.end() == true)
|
|
|
- {
|
|
|
- out << endl;
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false;)
|
|
|
+
|
|
|
+ bool FirstOr = true;
|
|
|
+ while (1)
|
|
|
{
|
|
|
- // Compute a single dependency element (glob or)
|
|
|
- pkgCache::DepIterator Start;
|
|
|
- pkgCache::DepIterator End;
|
|
|
- D.GlobOr(Start,End); // advances D
|
|
|
+ if (First == false)
|
|
|
+ for (unsigned J = 0; J != Indent; J++)
|
|
|
+ out << ' ';
|
|
|
+ First = false;
|
|
|
|
|
|
- if (Cache->IsImportantDep(End) == false)
|
|
|
- continue;
|
|
|
-
|
|
|
- if (Now == true)
|
|
|
+ if (FirstOr == false)
|
|
|
{
|
|
|
- if ((Cache[End] & pkgDepCache::DepGNow) == pkgDepCache::DepGNow)
|
|
|
- continue;
|
|
|
+ for (unsigned J = 0; J != strlen(End.DepType()) + 3; J++)
|
|
|
+ out << ' ';
|
|
|
}
|
|
|
else
|
|
|
+ out << ' ' << End.DepType() << ": ";
|
|
|
+ FirstOr = false;
|
|
|
+
|
|
|
+ out << Start.TargetPkg().FullName(true);
|
|
|
+
|
|
|
+ // Show a quick summary of the version requirements
|
|
|
+ if (Start.TargetVer() != 0)
|
|
|
+ out << " (" << Start.CompType() << " " << Start.TargetVer() << ")";
|
|
|
+
|
|
|
+ /* Show a summary of the target package if possible. In the case
|
|
|
+ of virtual packages we show nothing */
|
|
|
+ pkgCache::PkgIterator Targ = Start.TargetPkg();
|
|
|
+ if (Targ->ProvidesList == 0)
|
|
|
{
|
|
|
- if ((Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- bool FirstOr = true;
|
|
|
- while (1)
|
|
|
- {
|
|
|
- if (First == false)
|
|
|
- for (unsigned J = 0; J != Indent; J++)
|
|
|
- out << ' ';
|
|
|
- First = false;
|
|
|
+ out << ' ';
|
|
|
+ pkgCache::VerIterator Ver = (*Cache)[Targ].InstVerIter(*Cache);
|
|
|
+ if (Now == true)
|
|
|
+ Ver = Targ.CurrentVer();
|
|
|
|
|
|
- if (FirstOr == false)
|
|
|
+ if (Ver.end() == false)
|
|
|
{
|
|
|
- for (unsigned J = 0; J != strlen(End.DepType()) + 3; J++)
|
|
|
- out << ' ';
|
|
|
+ if (Now == true)
|
|
|
+ ioprintf(out,_("but %s is installed"),Ver.VerStr());
|
|
|
+ else
|
|
|
+ ioprintf(out,_("but %s is to be installed"),Ver.VerStr());
|
|
|
}
|
|
|
else
|
|
|
- out << ' ' << End.DepType() << ": ";
|
|
|
- FirstOr = false;
|
|
|
-
|
|
|
- out << Start.TargetPkg().FullName(true);
|
|
|
-
|
|
|
- // Show a quick summary of the version requirements
|
|
|
- if (Start.TargetVer() != 0)
|
|
|
- out << " (" << Start.CompType() << " " << Start.TargetVer() << ")";
|
|
|
-
|
|
|
- /* Show a summary of the target package if possible. In the case
|
|
|
- of virtual packages we show nothing */
|
|
|
- pkgCache::PkgIterator Targ = Start.TargetPkg();
|
|
|
- if (Targ->ProvidesList == 0)
|
|
|
{
|
|
|
- out << ' ';
|
|
|
- pkgCache::VerIterator Ver = Cache[Targ].InstVerIter(Cache);
|
|
|
- if (Now == true)
|
|
|
- Ver = Targ.CurrentVer();
|
|
|
-
|
|
|
- if (Ver.end() == false)
|
|
|
+ if ((*Cache)[Targ].CandidateVerIter(*Cache).end() == true)
|
|
|
{
|
|
|
- if (Now == true)
|
|
|
- ioprintf(out,_("but %s is installed"),Ver.VerStr());
|
|
|
+ if (Targ->ProvidesList == 0)
|
|
|
+ out << _("but it is not installable");
|
|
|
else
|
|
|
- ioprintf(out,_("but %s is to be installed"),Ver.VerStr());
|
|
|
- }
|
|
|
+ out << _("but it is a virtual package");
|
|
|
+ }
|
|
|
else
|
|
|
- {
|
|
|
- if (Cache[Targ].CandidateVerIter(Cache).end() == true)
|
|
|
- {
|
|
|
- if (Targ->ProvidesList == 0)
|
|
|
- out << _("but it is not installable");
|
|
|
- else
|
|
|
- out << _("but it is a virtual package");
|
|
|
- }
|
|
|
- else
|
|
|
- out << (Now?_("but it is not installed"):_("but it is not going to be installed"));
|
|
|
- }
|
|
|
+ out << (Now?_("but it is not installed"):_("but it is not going to be installed"));
|
|
|
}
|
|
|
-
|
|
|
- if (Start != End)
|
|
|
- out << _(" or");
|
|
|
- out << endl;
|
|
|
-
|
|
|
- if (Start == End)
|
|
|
- break;
|
|
|
- ++Start;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Start != End)
|
|
|
+ out << _(" or");
|
|
|
+ out << endl;
|
|
|
+
|
|
|
+ if (Start == End)
|
|
|
+ break;
|
|
|
+ ++Start;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+void ShowBroken(ostream &out, CacheFile &Cache, bool const Now)
|
|
|
+{
|
|
|
+ if (Cache->BrokenCount() == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ out << _("The following packages have unmet dependencies:") << endl;
|
|
|
+ for (unsigned J = 0; J < Cache->Head().PackageCount; J++)
|
|
|
+ {
|
|
|
+ pkgCache::PkgIterator const I(Cache,Cache.List[J]);
|
|
|
+ ShowBrokenPackage(out, &Cache, I, Now);
|
|
|
+ }
|
|
|
+}
|
|
|
+void ShowBroken(ostream &out, pkgCacheFile &Cache, bool const Now)
|
|
|
+{
|
|
|
+ if (Cache->BrokenCount() == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ out << _("The following packages have unmet dependencies:") << endl;
|
|
|
+ for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg)
|
|
|
+ ShowBrokenPackage(out, &Cache, Pkg, Now);
|
|
|
}
|
|
|
/*}}}*/
|
|
|
// ShowNew - Show packages to newly install /*{{{*/
|