diff options
author | Michael Vogt <michael.vogt@ubuntu.com> | 2005-06-23 16:40:54 +0000 |
---|---|---|
committer | Michael Vogt <michael.vogt@ubuntu.com> | 2005-06-23 16:40:54 +0000 |
commit | a83d884db24933000f19dbff706529db057d50c1 (patch) | |
tree | fc3ffeb8da0cfd99e290d36c59ede04edba58fb3 /apt-pkg | |
parent | afb1e2e3bb580077c6c917e6ea98baad8f3c39b3 (diff) |
* cleanups
Diffstat (limited to 'apt-pkg')
-rw-r--r-- | apt-pkg/depcache.cc | 91 | ||||
-rw-r--r-- | apt-pkg/depcache.h | 4 |
2 files changed, 66 insertions, 29 deletions
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 5da411e4d..552a45a16 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -20,7 +20,7 @@ #include <apt-pkg/fileutl.h> #include <apt-pkg/configuration.h> #include <apt-pkg/tagfile.h> - +#include <sstream> #include <apti18n.h> /*}}}*/ @@ -103,6 +103,66 @@ bool pkgDepCache::Init(OpProgress *Prog) } /*}}}*/ +bool pkgDepCache::readStateFile(OpProgress *Prog) +{ + FileFd state_file; + string state = _config->FindDir("Dir::State") + "pkgstates"; + if(FileExists(state)) { + state_file.Open(state, FileFd::ReadOnly); + int file_size = state_file.Size(); + Prog->OverallProgress(0, file_size, 1, + _("Reading extended state information")); + + pkgTagFile tagfile(&state_file); + pkgTagSection section; + int amt=0; + while(tagfile.Step(section)) { + string pkgname = section.FindS("Package"); + pkgCache::PkgIterator pkg=Cache->FindPkg(pkgname); + // Silently ignore unknown packages and packages with no actual + // version. + if(!pkg.end() && !pkg.VersionList().end()) { + short reason = section.FindI("Remove-Reason", + pkgCache::State::RemoveManual); + PkgState[pkg->ID].AutomaticRemove = reason; + //std::cout << "Set: " << pkgname << " to " << reason << std::endl; + amt+=section.size(); + Prog->OverallProgress(amt, file_size, 1, + _("Reading extended state information")); + } + Prog->OverallProgress(file_size, file_size, 1, + _("Reading extended state information")); + } + } + + return true; +} + +bool pkgDepCache::writeStateFile(OpProgress *prog) +{ + // write the auto-mark list ---------------------------------- + + FileFd StateFile; + string state = _config->FindDir("Dir::State") + "pkgstates"; + + if(!StateFile.Open(state, FileFd::WriteEmpty)) + return _error->Error(_("Failed to write StateFile %s"), + state.c_str()); + + std::ostringstream ostr; + for(pkgCache::PkgIterator pkg=Cache->PkgBegin(); !pkg.end();pkg++) { + if(PkgState[pkg->ID].AutomaticRemove != pkgCache::State::RemoveUnknown) { + ostr.str(string("")); + ostr << "Package: " << pkg.Name() + << "\nRemove-Reason: " + << (int)(PkgState[pkg->ID].AutomaticRemove) << "\n\n"; + StateFile.Write(ostr.str().c_str(), ostr.str().size()); + //std::cout << "Writing auto-mark: " << ostr.str() << endl; + } + } + return true; +} + // DepCache::CheckDep - Checks a single dependency /*{{{*/ // --------------------------------------------------------------------- /* This first checks the dependency against the main target package and @@ -454,34 +514,7 @@ void pkgDepCache::Update(OpProgress *Prog) AddStates(I); } - // read the state file ------------------------------ - FileFd state_file; - string state = _config->FindDir("Dir::State") + "pkgstates"; - if(FileExists(state)) { - state_file.Open(state, FileFd::ReadOnly); - int file_size = state_file.Size(); - Prog->OverallProgress(0, file_size, 1, _("Reading extended state information")); - - pkgTagFile tagfile(&state_file); - pkgTagSection section; - int amt=0; - while(tagfile.Step(section)) { - string pkgname = section.FindS("Package"); - pkgCache::PkgIterator pkg=Cache->FindPkg(pkgname); - // Silently ignore unknown packages and packages with no actual - // version. - if(!pkg.end() && !pkg.VersionList().end()) { - short reason = section.FindI("Remove-Reason", pkgCache::State::RemoveManual); - PkgState[pkg->ID].AutomaticRemove = reason; - //std::cout << "Set: " << pkgname << " to " << reason << std::endl; - amt+=section.size(); - Prog->OverallProgress(amt, file_size, 1, _("Reading extended state information")); - } - Prog->OverallProgress(file_size, file_size, 1, _("Reading extended state information")); - } - } - //-------------------------------------- - + readStateFile(Prog); if (Prog != 0) Prog->Progress(Done); diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index f974bfacf..e02ed72f0 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -198,6 +198,10 @@ class pkgDepCache : protected pkgCache::Namespace // This is for debuging void Update(OpProgress *Prog = 0); + + // read persistent states + bool readStateFile(OpProgress *prog); + bool writeStateFile(OpProgress *prog); // Size queries inline double UsrSize() {return iUsrSize;}; |