diff options
Diffstat (limited to 'cmdline/apt-cache.cc')
-rw-r--r-- | cmdline/apt-cache.cc | 322 |
1 files changed, 1 insertions, 321 deletions
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index 4e8a51583..465911570 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -43,6 +43,7 @@ #include <apt-private/private-cacheset.h> #include <apt-private/private-cmndline.h> +#include <apt-private/private-depends.h> #include <apt-private/private-show.h> #include <apt-private/private-search.h> #include <apt-private/private-main.h> @@ -638,138 +639,6 @@ static bool DumpAvail(CommandLine &) return !_error->PendingError(); } /*}}}*/ -// ShowDepends - Helper for printing out a dependency tree /*{{{*/ -static bool ShowDepends(CommandLine &CmdL, bool const RevDepends) -{ - pkgCacheFile CacheFile; - pkgCache *Cache = CacheFile.GetPkgCache(); - if (unlikely(Cache == NULL)) - return false; - - CacheSetHelperVirtuals helper(false); - APT::VersionList verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1, APT::CacheSetHelper::CANDIDATE, helper); - if (verset.empty() == true && helper.virtualPkgs.empty() == true) - return _error->Error(_("No packages found")); - std::vector<bool> Shown(Cache->Head().PackageCount); - - bool const Recurse = _config->FindB("APT::Cache::RecurseDepends", false); - bool const Installed = _config->FindB("APT::Cache::Installed", false); - bool const Important = _config->FindB("APT::Cache::Important", false); - bool const ShowDepType = _config->FindB("APT::Cache::ShowDependencyType", RevDepends == false); - bool const ShowVersion = _config->FindB("APT::Cache::ShowVersion", false); - bool const ShowPreDepends = _config->FindB("APT::Cache::ShowPre-Depends", true); - bool const ShowDepends = _config->FindB("APT::Cache::ShowDepends", true); - bool const ShowRecommends = _config->FindB("APT::Cache::ShowRecommends", Important == false); - bool const ShowSuggests = _config->FindB("APT::Cache::ShowSuggests", Important == false); - bool const ShowReplaces = _config->FindB("APT::Cache::ShowReplaces", Important == false); - bool const ShowConflicts = _config->FindB("APT::Cache::ShowConflicts", Important == false); - bool const ShowBreaks = _config->FindB("APT::Cache::ShowBreaks", Important == false); - bool const ShowEnhances = _config->FindB("APT::Cache::ShowEnhances", Important == false); - bool const ShowOnlyFirstOr = _config->FindB("APT::Cache::ShowOnlyFirstOr", false); - bool const ShowImplicit = _config->FindB("APT::Cache::ShowImplicit", false); - - while (verset.empty() != true) - { - pkgCache::VerIterator Ver = *verset.begin(); - verset.erase(verset.begin()); - pkgCache::PkgIterator Pkg = Ver.ParentPkg(); - Shown[Pkg->ID] = true; - - cout << Pkg.FullName(true) << endl; - - if (RevDepends == true) - cout << "Reverse Depends:" << endl; - for (pkgCache::DepIterator D = RevDepends ? Pkg.RevDependsList() : Ver.DependsList(); - D.end() == false; ++D) - { - switch (D->Type) { - case pkgCache::Dep::PreDepends: if (!ShowPreDepends) continue; break; - case pkgCache::Dep::Depends: if (!ShowDepends) continue; break; - case pkgCache::Dep::Recommends: if (!ShowRecommends) continue; break; - case pkgCache::Dep::Suggests: if (!ShowSuggests) continue; break; - case pkgCache::Dep::Replaces: if (!ShowReplaces) continue; break; - case pkgCache::Dep::Conflicts: if (!ShowConflicts) continue; break; - case pkgCache::Dep::DpkgBreaks: if (!ShowBreaks) continue; break; - case pkgCache::Dep::Enhances: if (!ShowEnhances) continue; break; - } - if (ShowImplicit == false && D.IsImplicit()) - continue; - - 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) << ">"; - else - cout << Trg.FullName(true); - if (ShowVersion == true && D->Version != 0) - cout << " (" << pkgCache::CompTypeDeb(D->CompareOp) << ' ' << D.TargetVer() << ')'; - cout << std::endl; - - if (Recurse == true && Shown[Trg->ID] == false) - { - Shown[Trg->ID] = true; - verset.insert(APT::VersionSet::FromPackage(CacheFile, Trg, APT::CacheSetHelper::CANDIDATE, helper)); - } - - } - - // Display all solutions - std::unique_ptr<pkgCache::Version *[]> List(D.AllTargets()); - pkgPrioSortList(*Cache,List.get()); - for (pkgCache::Version **I = List.get(); *I != 0; 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::CacheSetHelper::CANDIDATE, helper)); - } - } - - if (ShowOnlyFirstOr == true) - while ((D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or) ++D; - } - } - - for (APT::PackageSet::const_iterator Pkg = helper.virtualPkgs.begin(); - Pkg != helper.virtualPkgs.end(); ++Pkg) - cout << '<' << Pkg.FullName(true) << '>' << endl; - - return true; -} - /*}}}*/ -// Depends - Print out a dependency tree /*{{{*/ -// --------------------------------------------------------------------- -/* */ -static bool Depends(CommandLine &CmdL) -{ - return ShowDepends(CmdL, false); -} - /*}}}*/ -// RDepends - Print out a reverse dependency tree /*{{{*/ -// --------------------------------------------------------------------- -/* */ -static bool RDepends(CommandLine &CmdL) -{ - return ShowDepends(CmdL, true); -} - /*}}}*/ // xvcg - Generate a graph for xvcg /*{{{*/ // --------------------------------------------------------------------- // Code contributed from Junichi Uekawa <dancer@debian.org> on 20 June 2002. @@ -1249,195 +1118,6 @@ static bool ShowPkgNames(CommandLine &CmdL) return true; } /*}}}*/ -// ShowSrcPackage - Show source package records /*{{{*/ -// --------------------------------------------------------------------- -/* */ -static bool ShowSrcPackage(CommandLine &CmdL) -{ - pkgCacheFile CacheFile; - pkgSourceList *List = CacheFile.GetSourceList(); - if (unlikely(List == NULL)) - return false; - - // Create the text record parsers - pkgSrcRecords SrcRecs(*List); - if (_error->PendingError() == true) - return false; - - unsigned found = 0; - for (const char **I = CmdL.FileList + 1; *I != 0; I++) - { - SrcRecs.Restart(); - - pkgSrcRecords::Parser *Parse; - unsigned found_this = 0; - while ((Parse = SrcRecs.Find(*I,false)) != 0) { - // SrcRecs.Find() will find both binary and source names - if (_config->FindB("APT::Cache::Only-Source", false) == true) - if (Parse->Package() != *I) - continue; - cout << Parse->AsStr() << endl;; - found++; - found_this++; - } - if (found_this == 0) { - _error->Warning(_("Unable to locate package %s"),*I); - continue; - } - } - if (found == 0) - _error->Notice(_("No packages found")); - return true; -} - /*}}}*/ -// Policy - Show the results of the preferences file /*{{{*/ -// --------------------------------------------------------------------- -/* */ -static bool Policy(CommandLine &CmdL) -{ - pkgCacheFile CacheFile; - pkgCache *Cache = CacheFile.GetPkgCache(); - pkgPolicy *Plcy = CacheFile.GetPolicy(); - pkgSourceList *SrcList = CacheFile.GetSourceList(); - if (unlikely(Cache == NULL || Plcy == NULL || SrcList == NULL)) - return false; - - /* Should the MultiArchKiller be run to see which pseudo packages for an - arch all package are currently installed? Activating it gives a speed - penality for no real gain beside enhanced debugging, so in general no. */ - if (_config->FindB("APT::Cache::Policy::DepCache", false) == true) - CacheFile.GetDepCache(); - - // Print out all of the package files - if (CmdL.FileList[1] == 0) - { - cout << _("Package files:") << endl; - for (pkgCache::PkgFileIterator F = Cache->FileBegin(); F.end() == false; ++F) - { - if (F.Flagged(pkgCache::Flag::NoPackages)) - continue; - // Locate the associated index files so we can derive a description - pkgIndexFile *Indx; - if (SrcList->FindIndex(F,Indx) == false && - _system->FindIndex(F,Indx) == false) - return _error->Error(_("Cache is out of sync, can't x-ref a package file")); - - printf("%4i %s\n", - Plcy->GetPriority(F),Indx->Describe(true).c_str()); - - // Print the reference information for the package - string Str = F.RelStr(); - if (Str.empty() == false) - printf(" release %s\n",F.RelStr().c_str()); - if (F.Site() != 0 && F.Site()[0] != 0) - printf(" origin %s\n",F.Site()); - } - - // Show any packages have explicit pins - cout << _("Pinned packages:") << endl; - pkgCache::PkgIterator I = Cache->PkgBegin(); - for (;I.end() != true; ++I) - { - // Old code for debugging - if (_config->FindI("APT::Policy", 1) < 1) { - if (Plcy->GetPriority(I) == 0) - continue; - - // Print the package name and the version we are forcing to - cout << " " << I.FullName(true) << " -> "; - - pkgCache::VerIterator V = Plcy->GetMatch(I); - if (V.end() == true) - cout << _("(not found)") << endl; - else - cout << V.VerStr() << endl; - - continue; - } - // New code - for (pkgCache::VerIterator V = I.VersionList(); !V.end(); V++) { - auto Prio = Plcy->GetPriority(V, false); - if (Prio == 0) - continue; - - cout << " "; - // Print the package name and the version we are forcing to - ioprintf(cout, _("%s -> %s with priority %d\n"), I.FullName(true).c_str(), V.VerStr(), Prio); - } - } - return true; - } - - char const * const msgInstalled = _(" Installed: "); - char const * const msgCandidate = _(" Candidate: "); - short const InstalledLessCandidate = - mbstowcs(NULL, msgInstalled, 0) - mbstowcs(NULL, msgCandidate, 0); - short const deepInstalled = - (InstalledLessCandidate < 0 ? (InstalledLessCandidate*-1) : 0) - 1; - short const deepCandidate = - (InstalledLessCandidate > 0 ? (InstalledLessCandidate) : 0) - 1; - - // Print out detailed information for each package - APT::CacheSetHelper helper(true, GlobalError::NOTICE); - APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1, helper); - for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) - { - cout << Pkg.FullName(true) << ":" << endl; - - // Installed version - cout << msgInstalled << OutputInDepth(deepInstalled, " "); - if (Pkg->CurrentVer == 0) - cout << _("(none)") << endl; - else - cout << Pkg.CurrentVer().VerStr() << endl; - - // Candidate Version - cout << msgCandidate << OutputInDepth(deepCandidate, " "); - pkgCache::VerIterator V = Plcy->GetCandidateVer(Pkg); - if (V.end() == true) - cout << _("(none)") << endl; - else - cout << V.VerStr() << endl; - - // Pinned version - if (_config->FindI("APT::Policy", 1) < 1 && Plcy->GetPriority(Pkg) != 0) - { - cout << _(" Package pin: "); - V = Plcy->GetMatch(Pkg); - if (V.end() == true) - cout << _("(not found)") << endl; - else - cout << V.VerStr() << endl; - } - - // Show the priority tables - cout << _(" Version table:") << endl; - for (V = Pkg.VersionList(); V.end() == false; ++V) - { - if (Pkg.CurrentVer() == V) - cout << " *** " << V.VerStr(); - else - cout << " " << V.VerStr(); - if (_config->FindI("APT::Policy", 1) < 1) - cout << " " << Plcy->GetPriority(Pkg) << endl; - else - cout << " " << Plcy->GetPriority(V) << endl; - for (pkgCache::VerFileIterator VF = V.FileList(); VF.end() == false; ++VF) - { - // Locate the associated index files so we can derive a description - pkgIndexFile *Indx; - if (SrcList->FindIndex(VF.File(),Indx) == false && - _system->FindIndex(VF.File(),Indx) == false) - return _error->Error(_("Cache is out of sync, can't x-ref a package file")); - printf(" %4i %s\n",Plcy->GetPriority(VF.File()), - Indx->Describe(true).c_str()); - } - } - } - - return true; -} - /*}}}*/ // Madison - Look a bit like katie's madison /*{{{*/ // --------------------------------------------------------------------- /* */ |