From: Michael Vogt Date: Thu, 7 Sep 2006 09:52:58 +0000 (+0200) Subject: * apt-pkg/depcache.cc: X-Git-Tag: 0.7.24ubuntu1~235 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/3a089a0178ee7b3adff28dcc8749735898201e27?ds=inline;hp=-c * apt-pkg/depcache.cc: - merged from install-recommends * debian/apt.conf.ubuntu: - added "APT::Install-Recommends-Section" to "metapackages" * renamed apt.conf.autoremove -> apt.conf.ubuntu --- 3a089a0178ee7b3adff28dcc8749735898201e27 diff --combined apt-pkg/depcache.cc index 4d193dc2e,422343e4a..740d14426 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@@ -16,52 -16,15 +16,52 @@@ #include #include #include + +#include #include +#include +#include + +#include +#include +#include + #include - /*}}}*/ + +pkgDepCache::ActionGroup::ActionGroup(pkgDepCache &cache) : + cache(cache), released(false) +{ + ++cache.group_level; +} + +void pkgDepCache::ActionGroup::release() +{ + if(!released) + { + if(cache.group_level == 0) + std::cerr << "W: Unbalanced action groups, expect badness" << std::endl; + else + { + --cache.group_level; + + if(cache.group_level == 0) + cache.MarkAndSweep(); + } + + released = false; + } +} + +pkgDepCache::ActionGroup::~ActionGroup() +{ + release(); +} // DepCache::pkgDepCache - Constructors /*{{{*/ // --------------------------------------------------------------------- /* */ pkgDepCache::pkgDepCache(pkgCache *pCache,Policy *Plcy) : - Cache(pCache), PkgState(0), DepState(0) + group_level(0), Cache(pCache), PkgState(0), DepState(0) { delLocalPolicy = 0; LocalPolicy = Plcy; @@@ -84,10 -47,6 +84,10 @@@ pkgDepCache::~pkgDepCache( /* This allocats the extension buffers and initializes them. */ bool pkgDepCache::Init(OpProgress *Prog) { + // Suppress mark updates during this operation (just in case) and + // run a mark operation when Init terminates. + ActionGroup actions(*this); + delete [] PkgState; delete [] DepState; PkgState = new StateCache[Head().PackageCount]; @@@ -113,7 -72,7 +113,7 @@@ // Find the proper cache slot StateCache &State = PkgState[I->ID]; State.iFlags = 0; - + // Figure out the install version State.CandidateVer = GetCandidateVer(I); State.InstallVer = I.CurrentVer(); @@@ -135,130 -94,11 +135,130 @@@ if(Prog != 0) Prog->Done(); - + return true; } /*}}}*/ +bool pkgDepCache::readStateFile(OpProgress *Prog) +{ + FileFd state_file; + string state = _config->FindDir("Dir::State") + "extended_states"; + if(FileExists(state)) { + state_file.Open(state, FileFd::ReadOnly); + int file_size = state_file.Size(); + if(Prog != NULL) + Prog->OverallProgress(0, file_size, 1, + _("Reading 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("Auto-Installed", 0); + if(reason > 0) + PkgState[pkg->ID].Flags |= Flag::Auto; + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::cout << "Auto-Installed : " << pkgname << std::endl; + amt+=section.size(); + if(Prog != NULL) + Prog->OverallProgress(amt, file_size, 1, + _("Reading state information")); + } + if(Prog != NULL) + Prog->OverallProgress(file_size, file_size, 1, + _("Reading state information")); + } + } + + return true; +} + +bool pkgDepCache::writeStateFile(OpProgress *prog) +{ + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::clog << "pkgDepCache::writeStateFile()" << std::endl; + + FileFd StateFile; + string state = _config->FindDir("Dir::State") + "extended_states"; + + // if it does not exist, create a empty one + if(!FileExists(state)) + { + StateFile.Open(state, FileFd::WriteEmpty); + StateFile.Close(); + } + + // open it + if(!StateFile.Open(state, FileFd::ReadOnly)) + return _error->Error(_("Failed to open StateFile %s"), + state.c_str()); + + FILE *OutFile; + string outfile = state + ".tmp"; + if((OutFile = fopen(outfile.c_str(),"w")) == NULL) + return _error->Error(_("Failed to write temporary StateFile %s"), + outfile.c_str()); + + // first merge with the existing sections + pkgTagFile tagfile(&StateFile); + pkgTagSection section; + std::set pkgs_seen; + const char *nullreorderlist[] = {0}; + while(tagfile.Step(section)) { + string pkgname = section.FindS("Package"); + // Silently ignore unknown packages and packages with no actual + // version. + pkgCache::PkgIterator pkg=Cache->FindPkg(pkgname); + if(pkg.end() || pkg.VersionList().end()) + continue; + bool oldAuto = section.FindI("Auto-Installed"); + bool newAuto = (PkgState[pkg->ID].Flags & Flag::Auto); + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::clog << "Update exisiting AutoInstall info: " + << pkg.Name() << std::endl; + TFRewriteData rewrite[2]; + rewrite[0].Tag = "Auto-Installed"; + rewrite[0].Rewrite = newAuto ? "1" : "0"; + rewrite[0].NewTag = 0; + rewrite[1].Tag = 0; + TFRewrite(OutFile, section, nullreorderlist, rewrite); + fprintf(OutFile,"\n"); + pkgs_seen.insert(pkgname); + } + + // then write the ones we have not seen yet + std::ostringstream ostr; + for(pkgCache::PkgIterator pkg=Cache->PkgBegin(); !pkg.end(); pkg++) { + if(PkgState[pkg->ID].Flags & Flag::Auto) { + if (pkgs_seen.find(pkg.Name()) != pkgs_seen.end()) { + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::clog << "Skipping already written " << pkg.Name() << std::endl; + continue; + } + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::clog << "Writing new AutoInstall: " + << pkg.Name() << std::endl; + ostr.str(string("")); + ostr << "Package: " << pkg.Name() + << "\nAuto-Installed: 1\n\n"; + fprintf(OutFile,ostr.str().c_str()); + fprintf(OutFile,"\n"); + } + } + fclose(OutFile); + + // move the outfile over the real file + rename(outfile.c_str(), state.c_str()); + + return true; +} + // DepCache::CheckDep - Checks a single dependency /*{{{*/ // --------------------------------------------------------------------- /* This first checks the dependency against the main target package and @@@ -273,7 -113,7 +273,7 @@@ bool pkgDepCache::CheckDep(DepIterator we allow it anyhow because dpkg does. Technically it is a packaging bug. Conflicts may never self match */ if (Dep.TargetPkg() != Dep.ParentPkg() || - (Dep->Type != Dep::Conflicts && Dep->Type != Dep::Obsoletes)) + (Dep->Type != Dep::Conflicts && Dep->Type != Dep::DpkgBreaks && Dep->Type != Dep::Obsoletes)) { PkgIterator Pkg = Dep.TargetPkg(); // Check the base package @@@ -303,8 -143,7 +303,8 @@@ { /* Provides may never be applied against the same package if it is a conflicts. See the comment above. */ - if (P.OwnerPkg() == Pkg && Dep->Type == Dep::Conflicts) + if (P.OwnerPkg() == Pkg && + (Dep->Type == Dep::Conflicts || Dep->Type == Dep::DpkgBreaks)) continue; // Check if the provides is a hit @@@ -458,9 -297,7 +458,9 @@@ void pkgDepCache::BuildGroupOrs(VerIter /* Invert for Conflicts. We have to do this twice to get the right sense for a conflicts group */ - if (D->Type == Dep::Conflicts || D->Type == Dep::Obsoletes) + if (D->Type == Dep::Conflicts || + D->Type == Dep::DpkgBreaks || + D->Type == Dep::Obsoletes) State = ~State; // Add to the group if we are within an or.. @@@ -471,9 -308,7 +471,9 @@@ Group = 0; // Invert for Conflicts - if (D->Type == Dep::Conflicts || D->Type == Dep::Obsoletes) + if (D->Type == Dep::Conflicts || + D->Type == Dep::DpkgBreaks || + D->Type == Dep::Obsoletes) State = ~State; } } @@@ -606,9 -441,7 +606,9 @@@ void pkgDepCache::Update(OpProgress *Pr Group = 0; // Invert for Conflicts - if (D->Type == Dep::Conflicts || D->Type == Dep::Obsoletes) + if (D->Type == Dep::Conflicts || + D->Type == Dep::DpkgBreaks || + D->Type == Dep::Obsoletes) State = ~State; } } @@@ -621,14 -454,12 +621,14 @@@ if (Prog != 0) Prog->Progress(Done); + + readStateFile(Prog); } /*}}}*/ // DepCache::Update - Update the deps list of a package /*{{{*/ // --------------------------------------------------------------------- /* This is a helper for update that only does the dep portion of the scan. - It is mainly ment to scan reverse dependencies. */ + It is mainly meant to scan reverse dependencies. */ void pkgDepCache::Update(DepIterator D) { // Update the reverse deps @@@ -638,9 -469,7 +638,9 @@@ State = DependencyState(D); // Invert for Conflicts - if (D->Type == Dep::Conflicts || D->Type == Dep::Obsoletes) + if (D->Type == Dep::Conflicts || + D->Type == Dep::DpkgBreaks || + D->Type == Dep::Obsoletes) State = ~State; RemoveStates(D.ParentPkg()); @@@ -682,7 -511,7 +682,7 @@@ void pkgDepCache::Update(PkgIterator co // DepCache::MarkKeep - Put the package in the keep state /*{{{*/ // --------------------------------------------------------------------- /* */ -void pkgDepCache::MarkKeep(PkgIterator const &Pkg,bool Soft) +void pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser) { // Simplifies other routines. if (Pkg.end() == true) @@@ -694,9 -523,6 +694,9 @@@ Pkg.CurrentVer().Downloadable() == false) return; + /** \todo Can this be moved later in the method? */ + ActionGroup group(*this); + /* We changed the soft state all the time so the UI is a bit nicer to use */ StateCache &P = PkgState[Pkg->ID]; @@@ -713,8 -539,7 +713,8 @@@ if (Pkg->VersionList == 0) return; - P.Flags &= ~Flag::Auto; + if(FromUser && !P.Marked) + P.Flags &= ~Flag::Auto; RemoveSizes(Pkg); RemoveStates(Pkg); @@@ -740,8 -565,6 +740,8 @@@ void pkgDepCache::MarkDelete(PkgIterato if (Pkg.end() == true) return; + ActionGroup group(*this); + // Check that it is not already marked for delete StateCache &P = PkgState[Pkg->ID]; P.iFlags &= ~(AutoKept | Purge); @@@ -764,6 -587,7 +764,6 @@@ else P.Mode = ModeDelete; P.InstallVer = 0; - P.Flags &= Flag::Auto; AddStates(Pkg); Update(Pkg); @@@ -774,8 -598,7 +774,8 @@@ // --------------------------------------------------------------------- /* */ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, - unsigned long Depth, bool ForceImportantDeps) + unsigned long Depth, bool FromUser, + bool ForceImportantDeps) { if (Depth > 100) return; @@@ -784,8 -607,6 +784,8 @@@ if (Pkg.end() == true) return; + ActionGroup group(*this); + /* Check that it is not already marked for install and that it can be installed */ StateCache &P = PkgState[Pkg->ID]; @@@ -795,7 -616,7 +795,7 @@@ P.CandidateVer == (Version *)Pkg.CurrentVer())) { if (P.CandidateVer == (Version *)Pkg.CurrentVer() && P.InstallVer == 0) - MarkKeep(Pkg); + MarkKeep(Pkg, false, FromUser); return; } @@@ -813,20 -634,7 +813,20 @@@ P.Mode = ModeInstall; P.InstallVer = P.CandidateVer; - P.Flags &= ~Flag::Auto; + + if(FromUser) + { + // Set it to manual if it's a new install or cancelling the + // removal of a garbage package. + if(P.Status == 2 || (!Pkg.CurrentVer().end() && !P.Marked)) + P.Flags &= ~Flag::Auto; + } + else + { + // Set it to auto if this is a new install. + if(P.Status == 2) + P.Flags |= Flag::Auto; + } if (P.CandidateVer == (Version *)Pkg.CurrentVer()) P.Mode = ModeKeep; @@@ -873,6 -681,7 +873,7 @@@ bool found=false; VerIterator instVer = Pkg.CurrentVer(); if(!instVer.end()) + { for (DepIterator D = instVer.DependsList(); D.end() != true; D++) { //FIXME: deal better with or-groups(?) @@@ -881,9 -690,10 +882,10 @@@ if(IsImportantDep(D) && Start.TargetPkg() == D.TargetPkg()) found=true; } - // this is a new dep if it was not found to be already - // a important dep of the installed pacakge - isNewImportantDep = !found; + // this is a new dep if it was not found to be already + // a important dep of the installed pacakge + isNewImportantDep = !found; + } } if(isNewImportantDep) if(_config->FindB("Debug::pkgDepCache::AutoInstall",false) == true) @@@ -903,8 -713,7 +905,8 @@@ /* This bit is for processing the possibilty of an install/upgrade fixing the problem */ SPtrArray List = Start.AllTargets(); - if ((DepState[Start->ID] & DepCVer) == DepCVer) + if (Start->Type != Dep::DpkgBreaks && + (DepState[Start->ID] & DepCVer) == DepCVer) { // Right, find the best version to install.. Version **Cur = List; @@@ -935,37 -744,33 +937,37 @@@ } } - if (InstPkg.end() == false) + if (InstPkg.end() == false) { if(_config->FindB("Debug::pkgDepCache::AutoInstall",false) == true) std::clog << "Installing " << InstPkg.Name() << " as dep of " << Pkg.Name() << std::endl; - MarkInstall(InstPkg,true,Depth + 1, ForceImportantDeps); + MarkInstall(InstPkg,true,Depth + 1, false, ForceImportantDeps); // Set the autoflag, after MarkInstall because MarkInstall unsets it if (P->CurrentVer == 0) PkgState[InstPkg->ID].Flags |= Flag::Auto; } - continue; } - + /* For conflicts we just de-install the package and mark as auto, - Conflicts may not have or groups */ - if (Start->Type == Dep::Conflicts || Start->Type == Dep::Obsoletes) + Conflicts may not have or groups. For dpkg's Breaks we try to + upgrade the package. */ + if (Start->Type == Dep::Conflicts || Start->Type == Dep::Obsoletes || + Start->Type == Dep::DpkgBreaks) { for (Version **I = List; *I != 0; I++) { VerIterator Ver(*this,*I); PkgIterator Pkg = Ver.ParentPkg(); - - MarkDelete(Pkg); - PkgState[Pkg->ID].Flags |= Flag::Auto; + + if (Start->Type != Dep::DpkgBreaks) + MarkDelete(Pkg); + else + if (PkgState[Pkg->ID].CandidateVer != *I) + MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps); } continue; } @@@ -977,8 -782,6 +979,8 @@@ /* */ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To) { + ActionGroup group(*this); + RemoveSizes(Pkg); RemoveStates(Pkg); @@@ -997,11 -800,9 +999,11 @@@ /* */ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer) { + ActionGroup group(*this); + pkgCache::PkgIterator Pkg = TargetVer.ParentPkg(); StateCache &P = PkgState[Pkg->ID]; - + RemoveSizes(Pkg); RemoveStates(Pkg); @@@ -1014,18 -815,6 +1016,18 @@@ Update(Pkg); AddSizes(Pkg); } + +void pkgDepCache::MarkAuto(const PkgIterator &Pkg, bool Auto) +{ + StateCache &state = PkgState[Pkg->ID]; + + ActionGroup group(*this); + + if(Auto) + state.Flags |= Flag::Auto; + else + state.Flags &= ~Flag::Auto; +} /*}}}*/ // StateCache::Update - Compute the various static display things /*{{{*/ // --------------------------------------------------------------------- @@@ -1108,221 -897,6 +1110,221 @@@ pkgCache::VerIterator pkgDepCache::Poli return Last; } /*}}}*/ + /*}}}*/ + +pkgDepCache::DefaultRootSetFunc::DefaultRootSetFunc() + : constructedSuccessfully(false) +{ + Configuration::Item const *Opts; + Opts = _config->Tree("APT::NeverAutoRemove"); + if (Opts != 0 && Opts->Child != 0) + { + Opts = Opts->Child; + for (; Opts != 0; Opts = Opts->Next) + { + if (Opts->Value.empty() == true) + continue; + + regex_t *p = new regex_t; + if(regcomp(p,Opts->Value.c_str(), + REG_EXTENDED | REG_ICASE | REG_NOSUB) != 0) + { + regfree(p); + delete p; + _error->Error("Regex compilation error for APT::NeverAutoRemove"); + return; + } + + rootSetRegexp.push_back(p); + } + } + + constructedSuccessfully = true; +} + +pkgDepCache::DefaultRootSetFunc::~DefaultRootSetFunc() +{ + for(unsigned int i = 0; i < rootSetRegexp.size(); i++) + { + regfree(rootSetRegexp[i]); + delete rootSetRegexp[i]; + } +} + + +bool pkgDepCache::DefaultRootSetFunc::InRootSet(const pkgCache::PkgIterator &pkg) +{ + for(unsigned int i = 0; i < rootSetRegexp.size(); i++) + if (regexec(rootSetRegexp[i], pkg.Name(), 0, 0, 0) == 0) + return true; + + return false; +} + +pkgDepCache::InRootSetFunc *pkgDepCache::GetRootSetFunc() +{ + DefaultRootSetFunc *f = new DefaultRootSetFunc; + if(f->wasConstructedSuccessfully()) + return f; + else + { + delete f; + return NULL; + } +} + +bool pkgDepCache::MarkFollowsRecommends() +{ + return _config->FindB("APT::AutoRemove::RecommendsImportant", true); +} + +bool pkgDepCache::MarkFollowsSuggests() +{ + return _config->FindB("APT::AutoRemove::SuggestsImportant", false); +} + +// the main mark algorithm +bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc) +{ + bool follow_recommends; + bool follow_suggests; + + // init the states + for(PkgIterator p = PkgBegin(); !p.end(); ++p) + { + PkgState[p->ID].Marked = false; + PkgState[p->ID].Garbage = false; + + // debug output + if(_config->FindB("Debug::pkgAutoRemove",false) + && PkgState[p->ID].Flags & Flag::Auto) + std::clog << "AutoDep: " << p.Name() << std::endl; + } + + // init vars + follow_recommends = MarkFollowsRecommends(); + follow_suggests = MarkFollowsSuggests(); + + + + // do the mark part, this is the core bit of the algorithm + for(PkgIterator p = PkgBegin(); !p.end(); ++p) + { + if(!(PkgState[p->ID].Flags & Flag::Auto) || + (p->Flags & Flag::Essential) || + userFunc.InRootSet(p)) + + { + // the package is installed (and set to keep) + if(PkgState[p->ID].Keep() && !p.CurrentVer().end()) + MarkPackage(p, p.CurrentVer(), + follow_recommends, follow_suggests); + // the package is to be installed + else if(PkgState[p->ID].Install()) + MarkPackage(p, PkgState[p->ID].InstVerIter(*this), + follow_recommends, follow_suggests); + } + } + + return true; +} + +// mark a single package in Mark-and-Sweep +void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &pkg, + const pkgCache::VerIterator &ver, + bool follow_recommends, + bool follow_suggests) +{ + pkgDepCache::StateCache &state = PkgState[pkg->ID]; + VerIterator candver = state.CandidateVerIter(*this); + VerIterator instver = state.InstVerIter(*this); + +#if 0 + // If a package was garbage-collected but is now being marked, we + // should re-select it + // For cases when a pkg is set to upgrade and this trigger the + // removal of a no-longer used dependency. if the pkg is set to + // keep again later it will result in broken deps + if(state.Delete() && state.RemoveReason = Unused) + { + if(ver==candver) + mark_install(pkg, false, false, NULL); + else if(ver==pkg.CurrentVer()) + MarkKeep(pkg, false, false); + + instver=state.InstVerIter(*this); + } +#endif + + // Ignore versions other than the InstVer, and ignore packages + // that are already going to be removed or just left uninstalled. + if(!(ver == instver && !instver.end())) + return; + + // if we are marked already we are done + if(state.Marked) + return; + + //std::cout << "Setting Marked for: " << pkg.Name() << std::endl; + state.Marked=true; + + if(!ver.end()) + { + for(DepIterator d = ver.DependsList(); !d.end(); ++d) + { + if(d->Type == Dep::Depends || + d->Type == Dep::PreDepends || + (follow_recommends && + d->Type == Dep::Recommends) || + (follow_suggests && + d->Type == Dep::Suggests)) + { + // Try all versions of this package. + for(VerIterator V = d.TargetPkg().VersionList(); + !V.end(); ++V) + { + if(_system->VS->CheckDep(V.VerStr(), d->CompareOp, d.TargetVer())) + { + MarkPackage(V.ParentPkg(), V, + follow_recommends, follow_suggests); + } + } + // Now try virtual packages + for(PrvIterator prv=d.TargetPkg().ProvidesList(); + !prv.end(); ++prv) + { + if(_system->VS->CheckDep(prv.ProvideVersion(), d->CompareOp, + d.TargetVer())) + { + MarkPackage(prv.OwnerPkg(), prv.OwnerVer(), + follow_recommends, follow_suggests); + } + } + } + } + } +} + +bool pkgDepCache::Sweep() +{ + // do the sweep + for(PkgIterator p=PkgBegin(); !p.end(); ++p) + { + StateCache &state=PkgState[p->ID]; + + // if it is not marked and it is installed, it's garbage + if(!state.Marked && (!p.CurrentVer().end() || state.Install()) && + !state.Delete()) + { + state.Garbage=true; + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::cout << "Garbage: " << p.Name() << std::endl; + } + } + + return true; +} + // Policy::IsImportantDep - True if the dependency is important /*{{{*/ // --------------------------------------------------------------------- /* */ @@@ -1330,8 -904,22 +1332,22 @@@ bool pkgDepCache::Policy::IsImportantDe { if(Dep.IsCritical()) return true; - else if(Dep->Type == pkgCache::Dep::Recommends) - return _config->FindB("APT::Install-Recommends", false); + else if(Dep->Type == pkgCache::Dep::Recommends) + { + if ( _config->FindB("APT::Install-Recommends", false)) + return true; + // we suport a special mode to only install-recommends for certain + // sections + // FIXME: this is a meant as a temporarly solution until the + // recommends are cleaned up + string s = _config->Find("APT::Install-Recommends-Section",""); + if(s.size() > 0) + { + const char *sec = Dep.TargetPkg().Section(); + if (sec && strcmp(sec, s.c_str()) == 0) + return true; + } + } else if(Dep->Type == pkgCache::Dep::Suggests) return _config->FindB("APT::Install-Suggests", false); diff --combined debian/apt.conf.ubuntu index 000000000,000000000..8d095f17e new file mode 100644 --- /dev/null +++ b/debian/apt.conf.ubuntu @@@ -1,0 -1,0 +1,10 @@@ ++APT ++{ ++ NeverAutoRemove ++ { ++ "^linux-image.*"; ++ "^linux-restricted-modules.*"; ++ }; ++ ++ Install-Recommends-Section "metapackages"; ++}; diff --combined debian/changelog index d8f90ba40,65ec82cc1..0bd5e4532 --- a/debian/changelog +++ b/debian/changelog @@@ -1,54 -1,11 +1,59 @@@ -apt (0.6.45.2) unstable; urgency=low +apt (0.6.45ubuntu6) edgy; urgency=low - * added "--install-recommends" to handle recommends as - dependencies (closes: #42266) + [Michael Vogt] + * cmdline/apt-get.cc: + - always show auto-removable packages and give a hint how to remove + them - * debian/apt.conf.autoremove: ++ * debian/apt.conf.ubuntu: + - exlucde linux-image and linux-restricted-modules from ever being + auto-removed ++ - added "metapackages" as the section we want to install recommends ++ by default ++ * apt-pkg/depcache.cc: ++ - added support to turn install-recommends selectively on/off by ++ section + [Ian Jackson] + * Tests pass without code changes! Except that we need this: + * Bump cache file major version to force rebuild so that Breaks + dependencies are included. + * Don't depend on or suggest any particular dpkg or dpkg-dev versions; + --auto-deconfigure is very very old and dpkg-dev's Breaks support + is more or less orthogonal. + * Initial draft of `Breaks' implementation. Appears to compile, + but as yet *completely untested*. + - -- ++ -- Michael Vogt Thu, 7 Sep 2006 11:50:52 +0200 + +apt (0.6.45ubuntu5) edgy; urgency=low + + * apt-pkg/pkgcachegen.cc: + - increase the APT::Cache-Limit to deal with the increased demand due + to the translated descriptions + * apt-pkg/deb/dpkgpm.cc: + - pass "--auto-deconfigure" to dpkg on install to support the + new "breaks" in dpkg + + -- Michael Vogt Tue, 15 Aug 2006 12:06:26 +0200 + +apt (0.6.45ubuntu4) edgy; urgency=low + + * cmdline/apt-get.cc: + - fix in the new --fix-polciy code + + -- Michael Vogt Mon, 14 Aug 2006 21:08:11 +0200 + +apt (0.6.45ubuntu3) edgy; urgency=low + + * ABI break + * merged latest apt--install-recommends (closes: #559000) + * added "--fix-policy" option to can be used as "--fix-broken" and + will install missing weak depends (recommends, and/or suggests + depending on the settings) + * merged the apt--ddtp branch - -- + -- Michael Vogt Fri, 11 Aug 2006 12:53:23 +0200 -apt (0.6.45.1) unstable; urgency=low +apt (0.6.45ubuntu2) edgy; urgency=low * debian/control: - switched to libdb4.4 for building (closes: #381019) @@@ -57,18 -14,8 +62,18 @@@ versions of the package (closes: #257054) - properly handle recommends/suggests or-groups when printing the list of suggested/recommends packages (closes: #311619) + * merged "apt--install-recommends" branch: + - added "{no-}install-recommends" commandline option + - added APT::Install-{Recommends,Suggests} option + - currently Install-Recommends defaults to "False" - -- Michael Vogt Wed, 9 Aug 2006 14:27:54 +0200 + -- Michael Vogt Wed, 9 Aug 2006 23:38:46 +0200 + +apt (0.6.45ubuntu1) edgy; urgency=low + + * merged with debian/unstable + + -- Michael Vogt Tue, 1 Aug 2006 15:43:22 +0200 apt (0.6.45) unstable; urgency=low @@@ -109,38 -56,7 +114,38 @@@ -- Michael Vogt Thu, 27 Jul 2006 00:52:05 +0200 -apt (0.6.44.2) unstable; urgency=low +apt (0.6.44.2ubuntu4) edgy; urgency=low + + * Make apt-get dselect-upgrade happy again + + -- Michael Vogt Fri, 21 Jul 2006 11:03:02 +0200 + +apt (0.6.44.2ubuntu3) edgy; urgency=low + + * Close extended_states file after writing it. + + -- Colin Watson Tue, 18 Jul 2006 00:12:13 +0100 + +apt (0.6.44.2ubuntu2) edgy; urgency=low + + * create a empty extended_states file if none exists already + + -- Michael Vogt Tue, 4 Jul 2006 09:23:03 +0200 + +apt (0.6.44.2ubuntu1) edgy; urgency=low + + * merged with debian/unstable + * merged the "auto-mark" branch to support aptitude like + marking of automatically installed dependencies and added + "apt-get remove --auto-remove" to remove unused auto-installed + packages again + * changed library version from 3.11 to 3.50 to make it clearly + different from the debian version (we are ABI incompatible because + of the auto-mark patch) + + -- Michael Vogt Mon, 3 Jul 2006 18:30:46 +0200 + +apt (0.6.44.2) unstable; urgency=low * apt-pkg/depcache.cc: - added Debug::pkgDepCache::AutoInstall (thanks to infinity) @@@ -208,26 -124,6 +213,26 @@@ apt (0.6.44) unstable; urgency=lo -- Michael Vogt Mon, 8 May 2006 22:28:53 +0200 +apt (0.6.43.3ubuntu3) dapper; urgency=low + + * methods/http.cc: + - fix the user-agent string + + -- Michael Vogt Fri, 26 May 2006 18:09:32 +0200 + +apt (0.6.43.3ubuntu2) dapper; urgency=low + + * apt-pkg/deb/dpkgpm.cc: wording fixes (thanks to Matt Zimmerman) + + -- Michael Vogt Tue, 18 Apr 2006 13:24:40 +0200 + +apt (0.6.43.3ubuntu1) dapper; urgency=low + + * apt-pkg/acquire.cc: don't show ETA if it is 0 or absurdely large in + the status-fd (ubuntu #28954) + + -- Michael Vogt Tue, 28 Mar 2006 20:34:46 +0200 + apt (0.6.43.3) unstable; urgency=low * Merge bubulle@debian.org--2005/apt--main--0 up to patch-186: @@@ -237,46 -133,16 +242,46 @@@ * pl.po: Completed to 512t. Closes: #349514 * sk.po: Completed to 512t. Closes: #349474 * gl.po: Completed to 512 strings Closes: #349407 + * vi.po: Completed to 512 strings * sv.po: Completed to 512 strings Closes: #349210 * ru.po: Completed to 512 strings Closes: #349154 * da.po: Completed to 512 strings Closes: #349084 * fr.po: Completed to 512 strings + * LINGUAS: Add Welsh + * *.po: Updated from sources (512 strings) * vi.po: Completed to 511 strings Closes: #348968 - * zh_CN.po: Completed to 512t. Closes: #353936 - * it.po: Completed to 512t. Closes: #352803 - * pt_BR.po: Completed to 512t. Closes: #352419 + * apt-pkg/deb/deblistparser.cc: + - don't explode on a DepCompareOp in a Provides line, but warn about + it and ignore it otherwise (thanks to James Troup for reporting it) + * cmdline/apt-get.cc: + - don't lock the lists directory in DoInstall, breaks --print-uri + (thanks to James Troup for reporting it) + * debian/apt.dirs: create /etc/apt/sources.list.d + * make apt-cache madison work without deb-src entries (#352583) + * cmdline/apt-get.cc: only run the list-cleaner if a update was + successfull + * apt-get update errors are only warnings nowdays + * be more careful with the signature file on network failures + + -- Michael Vogt Wed, 22 Feb 2006 10:13:04 +0100 + +apt (0.6.43.2ubuntu1) dapper; urgency=low + + * Merge bubulle@debian.org--2005/apt--main--0 up to patch-182: + * ca.po: Completed to 512t. Closes: #351592 + * eu.po: Completed to 512t. Closes: #350483 + * ja.po: Completed to 512t. Closes: #349806 + * pl.po: Completed to 512t. Closes: #349514 + * sk.po: Completed to 512t. Closes: #349474 + * gl.po: Completed to 512 strings Closes: #349407 + * vi.po: Completed to 512 strings + * sv.po: Completed to 512 strings Closes: #349210 + * ru.po: Completed to 512 strings Closes: #349154 + * da.po: Completed to 512 strings Closes: #349084 + * fr.po: Completed to 512 strings * LINGUAS: Add Welsh * *.po: Updated from sources (512 strings) + * vi.po: Completed to 511 strings Closes: #348968 * apt-pkg/deb/deblistparser.cc: - don't explode on a DepCompareOp in a Provides line, but warn about it and ignore it otherwise (thanks to James Troup for reporting it) @@@ -287,10 -153,8 +292,10 @@@ * make apt-cache madison work without deb-src entries (#352583) * cmdline/apt-get.cc: only run the list-cleaner if a update was successfull + * apt-get update errors are only warnings nowdays + * be more careful with the signature file on network failures - -- Michael Vogt Wed, 22 Feb 2006 10:13:04 +0100 + -- Michael Vogt Mon, 20 Feb 2006 22:27:48 +0100 apt (0.6.43.2) unstable; urgency=low @@@ -315,26 -179,8 +320,26 @@@ -- Michael Vogt Thu, 19 Jan 2006 00:06:33 +0100 -apt (0.6.43.1) unstable; urgency=low +apt (0.6.43.1ubuntu1) dapper; urgency=low + * Merge bubulle@debian.org--2005/apt--main--0 up to patch-159: + - en_GB.po, de.po: fix spaces errors in "Ign " translations + Closes: #347258 + - makefile: make update-po a pre-requisite of clean target so + that POT and PO files are always up-to-date + - sv.po: Completed to 511t. Closes: #346450 + - sk.po: Completed to 511t. Closes: #346369 + - fr.po: Completed to 511t + - *.po: Updated from sources (511 strings) + * add patch to fix http download corruption problem (thanks to + Petr Vandrovec, closes: #280844, #290694) + * added APT::Periodic::Unattended-Upgrade (requires the package + "unattended-upgrade") + + -- Michael Vogt Tue, 10 Jan 2006 17:09:31 +0100 + +apt (0.6.43.1) unstable; urgency=low + * Merge bubulle@debian.org--2005/apt--main--0 up to patch-148: * fr.po: Completed to 510 strings * it.po: Completed to 510t @@@ -356,19 -202,6 +361,19 @@@ -- Michael Vogt Fri, 6 Jan 2006 01:17:08 +0100 +apt (0.6.43ubuntu2) dapper; urgency=low + + * merged some missing bits that wheren't merged by baz in the previous + upload (*grumble*) + + -- Michael Vogt Thu, 8 Dec 2005 18:35:58 +0100 + +apt (0.6.43ubuntu1) dapper; urgency=low + + * merged with debian + + -- Michael Vogt Fri, 25 Nov 2005 11:36:29 +0100 + apt (0.6.43) unstable; urgency=medium * Merge bubulle@debian.org--2005/apt--main--0 up to patch-132: @@@ -389,22 -222,6 +394,22 @@@ -- Michael Vogt Tue, 29 Nov 2005 00:17:07 +0100 +apt (0.6.42.3ubuntu2) dapper; urgency=low + + * Merge bubulle@debian.org--2005/apt--main--0 up to patch-131: + * zh_CN.po: Completed to 507 strings(Closes: #338267) + * gl.po: Completed to 510 strings (Closes: #338356) + * added support for "/etc/apt/sources.list.d" directory + (closes: #66325) + + -- Michael Vogt Mon, 14 Nov 2005 15:30:12 +0100 + +apt (0.6.42.3ubuntu1) dapper; urgency=low + + * synced with debian + + -- Michael Vogt Thu, 10 Nov 2005 05:05:56 +0100 + apt (0.6.42.3) unstable; urgency=low * Merge bubulle@debian.org--2005/apt--main--0 up to patch-129: @@@ -452,13 -269,13 +457,13 @@@ apt (0.6.42) unstable; urgency=lo - unmount the cdrom when apt failed to locate any package files * allow cdrom failures and fallback to other sources in that case (closes: #44135) - * better error text when dpkg-source fails + * better error text when dpkg-source fails * Merge bubulle@debian.org--2005/apt--main--0 up to patch-115: - patch-99: Added Galician translation - patch-100: Completed Danish translation (Closes: #325686) - patch-104: French translation completed - patch-109: Italian translation completed - - patch-112: Swedish translation update + - patch-112: Swedish translation update - patch-115: Basque translation completed (Closes: #333299) * applied french man-page update (thanks to Philippe Batailler) (closes: #316638, #327456) @@@ -472,12 -289,12 +477,12 @@@ * apt-pkg/contrib/md5.cc: - fix a alignment problem on sparc64 that gives random bus errors (thanks to Fabbione for providing a test-case) - * init the default ScreenWidth to 79 columns by default + * init the default ScreenWidth to 79 columns by default (Closes: #324921) - * cmdline/apt-cdrom.cc: + * cmdline/apt-cdrom.cc: - fix some missing gettext() calls (closes: #334539) * doc/apt-cache.8.xml: fix typo (closes: #334714) - + -- Michael Vogt Wed, 19 Oct 2005 22:02:09 +0200 apt (0.6.41) unstable; urgency=low @@@ -485,8 -302,8 +490,8 @@@ * improved the support for "error" and "conffile" reporting from dpkg, added the format to README.progress-reporting * added README.progress-reporting to the apt-doc package - * improved the network timeout handling, if a index file from a - sources.list times out or EAI_AGAIN is returned from getaddrinfo, + * improved the network timeout handling, if a index file from a + sources.list times out or EAI_AGAIN is returned from getaddrinfo, don't try to get the other files from that entry * Support architecture-specific extra overrides (closes: #225947). Thanks to Anthony Towns for idea and @@@ -494,10 -311,10 +499,10 @@@ * Javier Fernandez-Sanguino Pen~a: - Added a first version of an apt-secure.8 manpage, and modified apt-key and apt.end accordingly. Also added the 'update' - argument to apt-key which was previously not documented + argument to apt-key which was previously not documented (Closes: #322120) * Andreas Pakulat: - - added example apt-ftparchive.conf file to doc/examples + - added example apt-ftparchive.conf file to doc/examples (closes: #322483) * Fix a incorrect example in the man-page (closes: #282918) * Fix a bug for very long lines in the apt-cdrom code (closes: #280356) @@@ -506,84 -323,10 +511,84 @@@ * Change pkgPolicy::Pin from private to protected to let subclasses access it too (closes: #321799) * add default constructor for PrvIterator (closes: #322267) - * Reread status configuration on debSystem::Initialize() + * Reread status configuration on debSystem::Initialize() (needed for apt-proxy, thanks to Otavio for this patch) - + -- Michael Vogt Mon, 5 Sep 2005 22:59:03 +0200 + +apt (0.6.40.1ubuntu8) breezy; urgency=low + + * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-62: + - fix for a bad memory/file leak in the mmap code (ubuntu #15603) + * po/de.po, po/fr.po: + - updated the translations + * po/makefile: + - create a single pot file in each domain dir to make rosetta happy + + -- Michael Vogt Wed, 28 Sep 2005 10:16:06 +0200 + +apt (0.6.40.1ubuntu7) breezy; urgency=low + + * updated the pot/po files , no code changes + + -- Michael Vogt Tue, 27 Sep 2005 18:38:16 +0200 + +apt (0.6.40.1ubuntu6) breezy; urgency=low + + * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-56: + - make it possible for apt to handle a failed MediaChange event and + fall back to other sources (ubuntu #13713) + + -- Michael Vogt Tue, 13 Sep 2005 22:09:50 +0200 + +apt (0.6.40.1ubuntu5) breezy; urgency=low + + * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-{50,51}. + This adds media-change reporting to the apt status-fd (ubuntu #15213) + * Cherry picked michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-55: + apt-pkg/cdrom.cc: + - unmount the cdrom when apt failed to locate any package files + + -- Michael Vogt Mon, 12 Sep 2005 15:44:26 +0200 + +apt (0.6.40.1ubuntu4) breezy; urgency=low + + * debian/apt.cron.daily: + - fix a embarrassing typo + + -- Michael Vogt Wed, 7 Sep 2005 10:10:37 +0200 + +apt (0.6.40.1ubuntu3) breezy; urgency=low + + * debian/apt.cron.daily: + - use the ctime as well when figuring what packages need to + be removed. This fixes the problem that packages copied with + "cp -a" (e.g. from the installer) have old mtimes (ubuntu #14504) + + -- Michael Vogt Tue, 6 Sep 2005 18:30:46 +0200 + +apt (0.6.40.1ubuntu2) breezy; urgency=low + + * improved the support for "error" and "conffile" reporting from + dpkg, added the format to README.progress-reporting + * added README.progress-reporting to the apt-doc package + * Do md5sum checking for file and cdrom method (closes: #319142) + * Change pkgPolicy::Pin from private to protected to let subclasses + access it too (closes: #321799) + * methods/connect.cc: + - send failure reason for EAI_AGAIN (TmpResolveFailure) to acuire-item + * apt-pkg/acquire-item.cc: + - fail early if a FailReason is TmpResolveFailure (avoids hangs during + the install when no network is available) + * merged michael.vogt@ubuntu.com--2005/apt--trust-cdrom--0 + + -- Michael Vogt Tue, 23 Aug 2005 19:44:55 +0200 + +apt (0.6.40.1ubuntu1) breezy; urgency=low + + * Synchronize with Debian + + -- Michael Vogt Fri, 5 Aug 2005 14:20:56 +0200 apt (0.6.40.1) unstable; urgency=low @@@ -594,12 -337,6 +599,12 @@@ -- Michael Vogt Fri, 5 Aug 2005 13:24:58 +0200 +apt (0.6.40ubuntu1) breezy; urgency=low + + * Synchronize with Debian + + -- Matt Zimmerman Thu, 4 Aug 2005 15:53:22 -0700 + apt (0.6.40) unstable; urgency=low * Patch from Jordi Mallach to mark some additional strings for translation @@@ -615,39 -352,6 +620,39 @@@ -- Matt Zimmerman Thu, 28 Jul 2005 11:57:32 -0700 +apt (0.6.39ubuntu4) breezy; urgency=low + + * Fix keyring paths in apt-key, apt.postinst (I swear I remember doing this + before...) + + -- Matt Zimmerman Wed, 29 Jun 2005 08:39:17 -0700 + +apt (0.6.39ubuntu3) breezy; urgency=low + + * Fix keyring locations for Ubuntu in apt-key too. + + -- Colin Watson Wed, 29 Jun 2005 14:45:36 +0100 + +apt (0.6.39ubuntu2) breezy; urgency=low + + * Install ubuntu-archive.gpg rather than debian-archive.gpg as + /etc/apt/trusted.gpg. + + -- Colin Watson Wed, 29 Jun 2005 11:53:34 +0100 + +apt (0.6.39ubuntu1) breezy; urgency=low + + * Michael Vogt + - Change debian/bugscript to use #!/bin/bash (Closes: #313402) + - Fix a incorrect example in the man-page (closes: #282918) + - Support architecture-specific extra overrides + (closes: #225947). Thanks to Anthony Towns for idea and + the patch, thanks to Colin Watson for testing it. + - better report network timeouts from the methods to the acuire code, + only timeout once per sources.list line + + -- Matt Zimmerman Tue, 28 Jun 2005 11:52:24 -0700 + apt (0.6.39) unstable; urgency=low * Welsh translation update: daf@muse.19inch.net--2005/apt--main--0--patch-6 @@@ -658,14 -362,7 +663,14 @@@ * Update priority of apt-utils to important, to match the override file * Install only one keyring on each branch (Closes: #316119) - -- Matt Zimmerman Tue, 28 Jun 2005 11:51:09 -0700 + -- Matt Zimmerman Tue, 28 Jun 2005 11:35:21 -0700 + +apt (0.6.38ubuntu1) breezy; urgency=low + + * First release from Ubuntu branch + * Merge with --main--0, switch back to Ubuntu keyring + + -- Matt Zimmerman Sat, 25 Jun 2005 16:52:41 -0700 apt (0.6.38) unstable; urgency=low @@@ -697,7 -394,6 +702,7 @@@ apt (0.6.37) breezy; urgency=lo * Add Welsh translation from Dafydd Harries (daf@muse.19inch.net--2005/apt--main--0--patch-1) * Change debian/bugscript to use #!/bin/bash (Closes: #313402) + * Fix a incorrect example in the man-page (closes: #282918) -- Matt Zimmerman Tue, 24 May 2005 14:38:25 -0700 diff --combined debian/rules index ffc23402e,a8bf88762..2007370c4 --- a/debian/rules +++ b/debian/rules @@@ -210,15 -210,10 +210,15 @@@ apt: build debian/shlibs.loca cp debian/bugscript debian/$@/usr/share/bug/apt/script - cp share/debian-archive.gpg debian/$@/usr/share/$@ - + cp share/ubuntu-archive.gpg debian/$@/usr/share/$@ - cp debian/apt.conf.autoremove debian/$@/etc/apt/apt.conf.d/01autoremove ++ cp debian/apt.conf.ubuntu debian/$@/etc/apt/apt.conf.d/01ubuntu # head -n 500 ChangeLog > debian/ChangeLog + # make rosetta happy and remove pot files in po/ (but leave stuff + # in po/domains/* untouched) and cp *.po into each domain dir + rm -f build/po/*.pot + rm -f po/*.pot + dh_installexamples -p$@ $(BLD)/docs/examples/* dh_installman -p$@ dh_installcron -p$@ @@@ -343,4 -338,4 +343,4 @@@ arch-build mkdir -p debian/arch-build/apt-$(APT_DEBVER) tar -c --exclude=arch-build --no-recursion -f - `bzr inventory` | (cd debian/arch-build/$(PKG)-$(APT_DEBVER);tar xf -) $(MAKE) -C debian/arch-build/apt-$(APT_DEBVER) startup doc - (cd debian/arch-build/apt-$(APT_DEBVER); $(DEB_BUILD_PROG)) + (cd debian/arch-build/apt-$(APT_DEBVER); $(DEB_BUILD_PROG); dpkg-genchanges -S > ../apt_$(APT_DEBVER)_source.changes)