From 68225779d1337336707c33c0265fc537ae256813 Mon Sep 17 00:00:00 2001 From: Adam Conrad Date: Fri, 18 Jan 2013 01:09:43 -0700 Subject: =?UTF-8?q?*=20Merge=20from=20Debian=20unstable,=20pulling=20in=20?= =?UTF-8?q?new=20translations=20and=20fixes.=20*=20Add=20linux-headers=20t?= =?UTF-8?q?o=20/etc/kernel/postinst.d/apt-auto-removal=20guard.=20*=20Cata?= =?UTF-8?q?lan=20(Jordi=20Mallach)=20*=20Drop=20a=20confusing=20non-breaki?= =?UTF-8?q?ng=20space.=20Closes:=20#691024=20*=20Thai=20(Theppitak=20Karoo?= =?UTF-8?q?nboonyanan).=20Closes:=20#691613=20*=20Vietnamese=20(Tr?= =?UTF-8?q?=E1=BA=A7n=20Ng=E1=BB=8Dc=20Qu=C3=A2n).=20Closes:=20#693773=20*?= =?UTF-8?q?=20Fix=20Plural=20forms=20in=20German,=20French,=20Japanese=20a?= =?UTF-8?q?nd=20Portuguese=20=20=20translations.=20Thanks=20to=20Jakub=20W?= =?UTF-8?q?ilk=20for=20reporting=20these=20errors.=20*=20apt-pkg/packagema?= =?UTF-8?q?nager.cc:=20=20=20-=20do=20not=20do=20lock-step=20configuration?= =?UTF-8?q?=20for=20a=20M-A:same=20package=20if=20it=20isn't=20=20=20=20?= =?UTF-8?q?=20unpacked=20yet=20in=20SmartConfigure=20and=20do=20not=20unpa?= =?UTF-8?q?ck=20a=20M-A:same=20package=20=20=20=20=20again=20in=20SmartUnP?= =?UTF-8?q?ack=20if=20we=20have=20already=20configured=20it=20(LP:=20#1062?= =?UTF-8?q?503)=20*=20apt-pkg/depcache.cc:=20=20=20-=20don't=20call=20Mark?= =?UTF-8?q?Install=20with=20the=20FromUser=20flag=20set=20for=20packages?= =?UTF-8?q?=20=20=20=20=20which=20are=20dependencies=20of=20APT::Never-Mar?= =?UTF-8?q?kAuto-Sections=20matchers=20=20=20-=20no=20mode=20changes=20sho?= =?UTF-8?q?uld=20obviously=20be=20ok=20for=20pkgDepCache::IsModeChangeOk?= =?UTF-8?q?=20*=20cmdline/apt-get.cc:=20=20=20-=20do=20not=20call=20Mark{I?= =?UTF-8?q?nstall,Delete}=20from=20the=20autoremove=20code=20with=20=20=20?= =?UTF-8?q?=20=20the=20FromUser=20bit=20set=20to=20avoid=20modifying=20the?= =?UTF-8?q?=20auto-installed=20bit=20*=20apt-pkg/algorithms.cc:=20=20=20-?= =?UTF-8?q?=20ensure=20pkgProblemResolver=20calls=20MarkDelete=20without?= =?UTF-8?q?=20FromUser=20set=20=20=20=20=20so=20that=20it=20can't=20overru?= =?UTF-8?q?le=20holds=20and=20the=20protection=20flag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * change permissions of /var/log/apt/term.log to 0640 (LP: #975199) * apt-pkg/algorithms.cc: - fix package-pointer array memory leak in ResolveByKeepInternal() * Portuguese (Américo Monteiro) (Closes: #686975) * handle packages without a mandatory architecture (debian-policy §5.3) by introducing a pseudo-architecture 'none' so that the small group of users with these packages can get right of them without introducing too much hassle for other users (Closes: #686346) * merged the latest debian-sid fixes Correct fi translation for hash sum mismatches (lp:420403) --- apt-pkg/algorithms.cc | 28 +++++++++++++++++----------- apt-pkg/depcache.cc | 27 ++++++++++++--------------- 2 files changed, 29 insertions(+), 26 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 1b0161ffd..8cd9d4c6e 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -287,13 +287,13 @@ bool pkgApplyStatus(pkgDepCache &Cache) Cache[I].CandidateVerIter(Cache).Downloadable() == true) Cache.MarkInstall(I, true, 0, false); else - Cache.MarkDelete(I); + Cache.MarkDelete(I, false, 0, false); } break; // This means removal failed case pkgCache::State::HalfInstalled: - Cache.MarkDelete(I); + Cache.MarkDelete(I, false, 0, false); break; default: @@ -774,7 +774,7 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) if (WasKept == true) Cache.MarkKeep(Pkg, false, false); else - Cache.MarkDelete(Pkg); + Cache.MarkDelete(Pkg, false, 0, false); return false; } @@ -903,7 +903,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix) OldBreaks < Cache.BrokenCount()) { if (OldVer == 0) - Cache.MarkDelete(I); + Cache.MarkDelete(I, false, 0, false); else Cache.MarkKeep(I, false, false); } @@ -942,7 +942,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix) { if (Debug == true) clog << " Or group remove for " << I.FullName(false) << endl; - Cache.MarkDelete(I); + Cache.MarkDelete(I, false, 0, false); Change = true; } } @@ -1077,7 +1077,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix) { if (Debug == true) clog << " Removing " << I.FullName(false) << " rather than change " << Start.TargetPkg().FullName(false) << endl; - Cache.MarkDelete(I); + Cache.MarkDelete(I, false, 0, false); if (Counter > 1 && Scores[Pkg->ID] > Scores[I->ID]) Scores[I->ID] = Scores[Pkg->ID]; } @@ -1166,7 +1166,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix) if (Debug == true) clog << " Removing " << I.FullName(false) << " because I can't find " << Start.TargetPkg().FullName(false) << endl; if (InOr == false) - Cache.MarkDelete(I); + Cache.MarkDelete(I, false, 0, false); } Change = true; @@ -1193,7 +1193,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix) { if (Debug == true) clog << " Fixing " << I.FullName(false) << " via remove of " << J->Pkg.FullName(false) << endl; - Cache.MarkDelete(J->Pkg); + Cache.MarkDelete(J->Pkg, false, 0, false); } } else @@ -1419,12 +1419,18 @@ bool pkgProblemResolver::ResolveByKeepInternal() continue; // Restart again. - if (K == LastStop) - return _error->Error("Internal Error, pkgProblemResolver::ResolveByKeep is looping on package %s.",I.FullName(false).c_str()); + if (K == LastStop) { + // I is an iterator based off our temporary package list, + // so copy the name we need before deleting the temporary list + std::string const LoopingPackage = I.FullName(false); + delete[] PList; + return _error->Error("Internal Error, pkgProblemResolver::ResolveByKeep is looping on package %s.", LoopingPackage.c_str()); + } LastStop = K; K = PList - 1; - } + } + delete[] PList; return true; } /*}}}*/ diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index deb8ec21f..2ec346f0b 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -913,11 +913,15 @@ bool pkgDepCache::IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg, return true; StateCache &P = PkgState[Pkg->ID]; + // not changing the mode is obviously also fine as we might want to call + // e.g. MarkInstall multiple times with different arguments for the same package + if (P.Mode == mode) + return true; // if previous state was set by user only user can reset it if ((P.iFlags & Protected) == Protected) { - if (unlikely(DebugMarker == true) && P.Mode != mode) + if (unlikely(DebugMarker == true)) std::clog << OutputInDepth(Depth) << "Ignore Mark" << PrintMode(mode) << " of " << Pkg << " as its mode (" << PrintMode(P.Mode) << ") is protected" << std::endl; @@ -927,7 +931,7 @@ bool pkgDepCache::IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg, else if (mode != ModeKeep && Pkg->SelectedState == pkgCache::State::Hold && _config->FindB("APT::Ignore-Hold",false) == false) { - if (unlikely(DebugMarker == true) && P.Mode != mode) + if (unlikely(DebugMarker == true)) std::clog << OutputInDepth(Depth) << "Hold prevents Mark" << PrintMode(mode) << " of " << Pkg << std::endl; return false; @@ -1178,22 +1182,15 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, std::clog << OutputInDepth(Depth) << "Installing " << InstPkg.Name() << " as " << Start.DepType() << " of " << Pkg.Name() << std::endl; - // now check if we should consider it a automatic dependency or not - if(Pkg.Section() && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", Pkg.Section())) - { + MarkInstall(InstPkg, true, Depth + 1, false, ForceImportantDeps); + // now check if we should consider it a automatic dependency or not + if(InstPkg->CurrentVer == 0 && Pkg->Section != 0 && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", Pkg.Section())) + { if(DebugAutoInstall == true) std::clog << OutputInDepth(Depth) << "Setting NOT as auto-installed (direct " << Start.DepType() << " of pkg in APT::Never-MarkAuto-Sections)" << std::endl; - MarkInstall(InstPkg,true,Depth + 1, true); - } - else - { - // mark automatic dependency - MarkInstall(InstPkg,true,Depth + 1, false, ForceImportantDeps); - // Set the autoflag, after MarkInstall because MarkInstall unsets it - if (InstPkg->CurrentVer == 0) - PkgState[InstPkg->ID].Flags |= Flag::Auto; - } + MarkAuto(InstPkg, false); + } } continue; } -- cgit v1.2.3