From 80fa0d8a1a77f4dab696dcf11d1908ecda761fab Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 24 Jun 2005 09:36:22 +0000 Subject: * moved most of the real work into depcache::writeStateFile --- apt-pkg/algorithms.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 479927d65..2799c2fdd 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1061,6 +1061,17 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) return _error->Error(_("Unable to correct problems, you have held broken packages.")); } + // set the auto-flags (mvo: I'm not sure if we _really_ need this, but + // I didn't managed + pkgCache::PkgIterator I = Cache.PkgBegin(); + for (;I.end() != true; I++) { + if (Cache[I].NewInstall() && !(Flags[I->ID] & PreInstalled)) { + std::cout << "Resolve installed new pkg: " << I.Name() << " (now marking it as auto)" << std::endl; + Cache[I].Flags |= pkgCache::Flag::Auto; + } + } + + return true; } /*}}}*/ -- cgit v1.2.3-70-g09d2 From db1e7193fa7d5b86656c05112b9d6ad6e75845b8 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 24 Jun 2005 12:34:34 +0000 Subject: * moved the importend algorithm to algorithm.h as "pkgMarkUsed()" --- apt-pkg/algorithms.cc | 104 ++++++++++++++++++++++++++++++++++++ apt-pkg/algorithms.h | 4 ++ cmdline/apt-get.cc | 144 ++++++++++---------------------------------------- 3 files changed, 136 insertions(+), 116 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 2799c2fdd..98bd8dd8b 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1243,3 +1243,107 @@ void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List) qsort(List,Count,sizeof(*List),PrioComp); } /*}}}*/ + + +// pkgMarkPkgUsed - Mark used packages as dirty /*{{{*/ +// --------------------------------------------------------------------- +/* Mark all reachable packages as dirty. */ +void pkgMarkPkgUsed(pkgDepCache &Cache, pkgCache::PkgIterator Pkg, + pkgCache::State::PkgRemoveState DirtLevel) +{ + // If it is not installed, and we are in manual mode, ignore it + if ((Pkg->CurrentVer == 0 && Cache[Pkg].Install() == false || Cache[Pkg].Delete() == true) && + DirtLevel == pkgCache::State::RemoveManual) + { +// fprintf(stdout,"This one is not installed/virtual %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); + return; + } + + // If it is not installed, and it is not virtual, ignore it + if ((Pkg->CurrentVer == 0 && Cache[Pkg].Install() == false || Cache[Pkg].Delete() == true) && + Pkg->VersionList != 0) + { +// fprintf(stdout,"This one is not installed %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); + return; + } + + // If it is similar or more dirty than we are ;-), because we've been here already, don't mark it + // This is necessary because virtual packages just relay the current level, + // so it may be possible e.g. that this was already seen with ::RemoveSuggested, but + // we are ::RemoveRequired + if (Cache[Pkg].Dirty() >= DirtLevel) + { + //fprintf(stdout,"Seen already %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); + return; + } + + // If it is less important than the current DirtLevel, don't mark it + if (Cache[Pkg].AutomaticRemove != pkgCache::State::RemoveManual && + Cache[Pkg].AutomaticRemove > DirtLevel) + { +// fprintf(stdout,"We don't need %s %d %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel, Cache[Pkg].Dirty()); + return; + } + + // Mark it as used + Cache.SetDirty(Pkg, DirtLevel); + + //fprintf(stdout,"We keep %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); + + // We are a virtual package + if (Pkg->VersionList == 0) + { +// fprintf(stdout,"We are virtual %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); + for (pkgCache::PrvIterator Prv = Pkg.ProvidesList(); ! Prv.end(); ++Prv) + pkgMarkPkgUsed (Cache, Prv.OwnerPkg(), DirtLevel); + return; + } + + // Depending on the type of dependency, follow it + for (pkgCache::DepIterator D = Cache[Pkg].InstVerIter(Cache).DependsList(); ! D.end(); ++D) + { +// fprintf(stdout,"We depend on %s %s\n", D.TargetPkg().Name(), D.DepType()); + + switch(D->Type) + { + case pkgCache::Dep::Depends: + case pkgCache::Dep::PreDepends: + pkgMarkPkgUsed (Cache, D.TargetPkg(), pkgCache::State::RemoveRequired); + break; + case pkgCache::Dep::Recommends: + pkgMarkPkgUsed (Cache, D.TargetPkg(), pkgCache::State::RemoveRecommended); + break; + case pkgCache::Dep::Suggests: + pkgMarkPkgUsed (Cache, D.TargetPkg(), pkgCache::State::RemoveSuggested); + break; + case pkgCache::Dep::Conflicts: + case pkgCache::Dep::Replaces: + case pkgCache::Dep::Obsoletes: + // We don't handle these here + break; + } + } +// fprintf(stdout,"We keep %s %d %d \n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); +} + /*}}}*/ + +bool pkgMarkUsed(pkgDepCache &Cache) +{ + // debug only + for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) + if(!Cache[Pkg].Dirty() && Cache[Pkg].AutomaticRemove > 0) + std::cout << "has auto-remove information: " << Pkg.Name() + << " " << (int)Cache[Pkg].AutomaticRemove + << std::endl; + + // init with defaults + for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) + Cache.SetDirty(Pkg, pkgCache::State::RemoveUnknown); + + // go recursive over the cache + for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) + pkgMarkPkgUsed (Cache, Pkg, pkgCache::State::RemoveManual); + + + return true; +} diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index 174a7f58d..210127ab9 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -132,5 +132,9 @@ bool pkgAllUpgrade(pkgDepCache &Cache); bool pkgMinimizeUpgrade(pkgDepCache &Cache); void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List); + +// mark all reachable packages, everything that is not reach can +// be removed +bool pkgMarkUsed(pkgDepCache &Cache); #endif diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index f1496c9e2..54479e224 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1354,106 +1354,6 @@ bool DoUpdate(CommandLine &CmdL) return _error->Error(_("Some index files failed to download, they have been ignored, or old ones used instead.")); return true; -} - /*}}}*/ -// DoUpgrade - Upgrade all packages /*{{{*/ -// --------------------------------------------------------------------- -/* Upgrade all packages without installing new packages or erasing old - packages */ -bool DoUpgrade(CommandLine &CmdL) -{ - CacheFile Cache; - if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false) - return false; - - // Do the upgrade - if (pkgAllUpgrade(Cache) == false) - { - ShowBroken(c1out,Cache,false); - return _error->Error(_("Internal error, AllUpgrade broke stuff")); - } - - return InstallPackages(Cache,true); -} - /*}}}*/ -// RecurseDirty - Mark used packages as dirty /*{{{*/ -// --------------------------------------------------------------------- -/* Mark all reachable packages as dirty. */ -void RecurseDirty (CacheFile &Cache, pkgCache::PkgIterator Pkg, pkgCache::State::PkgRemoveState DirtLevel) -{ - // If it is not installed, and we are in manual mode, ignore it - if ((Pkg->CurrentVer == 0 && Cache[Pkg].Install() == false || Cache[Pkg].Delete() == true) && - DirtLevel == pkgCache::State::RemoveManual) - { -// fprintf(stdout,"This one is not installed/virtual %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); - return; - } - - // If it is not installed, and it is not virtual, ignore it - if ((Pkg->CurrentVer == 0 && Cache[Pkg].Install() == false || Cache[Pkg].Delete() == true) && - Pkg->VersionList != 0) - { -// fprintf(stdout,"This one is not installed %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); - return; - } - - // If it is similar or more dirty than we are ;-), because we've been here already, don't mark it - // This is necessary because virtual packages just relay the current level, - // so it may be possible e.g. that this was already seen with ::RemoveSuggested, but - // we are ::RemoveRequired - if (Cache[Pkg].Dirty() >= DirtLevel) - { - //fprintf(stdout,"Seen already %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); - return; - } - - // If it is less important than the current DirtLevel, don't mark it - if (Cache[Pkg].AutomaticRemove != pkgCache::State::RemoveManual && - Cache[Pkg].AutomaticRemove > DirtLevel) - { -// fprintf(stdout,"We don't need %s %d %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel, Cache[Pkg].Dirty()); - return; - } - - // Mark it as used - Cache->SetDirty(Pkg, DirtLevel); - - //fprintf(stdout,"We keep %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); - - // We are a virtual package - if (Pkg->VersionList == 0) - { -// fprintf(stdout,"We are virtual %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); - for (pkgCache::PrvIterator Prv = Pkg.ProvidesList(); ! Prv.end(); ++Prv) - RecurseDirty (Cache, Prv.OwnerPkg(), DirtLevel); - return; - } - - // Depending on the type of dependency, follow it - for (pkgCache::DepIterator D = Cache[Pkg].InstVerIter(Cache).DependsList(); ! D.end(); ++D) - { -// fprintf(stdout,"We depend on %s %s\n", D.TargetPkg().Name(), D.DepType()); - - switch(D->Type) - { - case pkgCache::Dep::Depends: - case pkgCache::Dep::PreDepends: - RecurseDirty (Cache, D.TargetPkg(), pkgCache::State::RemoveRequired); - break; - case pkgCache::Dep::Recommends: - RecurseDirty (Cache, D.TargetPkg(), pkgCache::State::RemoveRecommended); - break; - case pkgCache::Dep::Suggests: - RecurseDirty (Cache, D.TargetPkg(), pkgCache::State::RemoveSuggested); - break; - case pkgCache::Dep::Conflicts: - case pkgCache::Dep::Replaces: - case pkgCache::Dep::Obsoletes: - // We don't handle these here - break; - } - } -// fprintf(stdout,"We keep %s %d %d \n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); } /*}}}*/ // DoAutomaticRemove - Remove all automatic unused packages /*{{{*/ @@ -1462,30 +1362,23 @@ void RecurseDirty (CacheFile &Cache, pkgCache::PkgIterator Pkg, pkgCache::State: bool DoAutomaticRemove(CacheFile &Cache) { std::cout << "DoAutomaticRemove()" << std::endl; - for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) - if(!Cache[Pkg].Dirty() && Cache[Pkg].AutomaticRemove > 0) - std::cout << "has auto-remove information: " << Pkg.Name() - << " " << (int)Cache[Pkg].AutomaticRemove - << std::endl; - if (_config->FindB("APT::Get::Remove",true) == false) - return _error->Error(_("We are not supposed to delete stuff, can't start AutoRemover")); - - for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) - Cache->SetDirty(Pkg, pkgCache::State::RemoveUnknown); - - for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) - RecurseDirty (Cache, Pkg, pkgCache::State::RemoveManual); - + return _error->Error(_("We are not supposed to delete stuff, can't " + "start AutoRemover")); + // do the actual work + pkgMarkUsed(Cache); + // look over the cache to see what can be removed for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) { if (! Cache[Pkg].Dirty() && - (Pkg->CurrentVer != 0 && Cache[Pkg].Install() == false && Cache[Pkg].Delete() == false)) + (Pkg->CurrentVer != 0 && Cache[Pkg].Install() == false && + Cache[Pkg].Delete() == false)) { - fprintf(stdout,"We could delete %s %d\n", Pkg.Name(), Cache[Pkg].AutomaticRemove); + fprintf(stdout,"We could delete %s %d\n", + Pkg.Name(), Cache[Pkg].AutomaticRemove); Cache->MarkDelete(Pkg,_config->FindB("APT::Get::Purge",false)); } } @@ -1503,6 +1396,25 @@ bool DoAutomaticRemove(CacheFile &Cache) return _error->Error(_("Internal Error, AutoRemover broke stuff")); } return true; +} +// DoUpgrade - Upgrade all packages /*{{{*/ +// --------------------------------------------------------------------- +/* Upgrade all packages without installing new packages or erasing old + packages */ +bool DoUpgrade(CommandLine &CmdL) +{ + CacheFile Cache; + if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false) + return false; + + // Do the upgrade + if (pkgAllUpgrade(Cache) == false) + { + ShowBroken(c1out,Cache,false); + return _error->Error(_("Internal error, AllUpgrade broke stuff")); + } + + return InstallPackages(Cache,true); } /*}}}*/ // DoInstall - Install packages from the command line /*{{{*/ -- cgit v1.2.3-70-g09d2 From e004867d0979224adb9cbeb9705f156e16e3fe26 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 27 Jun 2005 16:29:16 +0000 Subject: * merged with mainline Patches applied: * andrelop@debian.org/apt--translation--0--base-0 tag of apt@packages.debian.org/apt--main--0--patch-79 * andrelop@debian.org/apt--translation--0--patch-1 Sync with Matt version. * andrelop@debian.org/apt--translation--0--patch-2 Update pt_BR translation * andrelop@debian.org/apt--translation--0--patch-3 Sync with bubulle's branch. * apt@packages.debian.org/apt--main--0--patch-89 Branch for Debian * apt@packages.debian.org/apt--main--0--patch-90 Update version in configure * apt@packages.debian.org/apt--main--0--patch-91 Fix French man page build * apt@packages.debian.org/apt--main--0--patch-92 Add the current Debian archive signing key * apt@packages.debian.org/apt--main--0--patch-93 Merge with mvo * apt@packages.debian.org/apt--main--0--patch-94 Update changelog * apt@packages.debian.org/apt--main--0--patch-95 Merge Christian's branch * apt@packages.debian.org/apt--main--0--patch-96 Update changelog * apt@packages.debian.org/apt--main--0--patch-97 Update priority of apt-utils to important, to match the override file * bubulle@debian.org--2005/apt--main--0--patch-82 Fix permissions * bubulle@debian.org--2005/apt--main--0--patch-83 French translation spellchecked * bubulle@debian.org--2005/apt--main--0--patch-84 Spell corrections in German translations * bubulle@debian.org--2005/apt--main--0--patch-85 Correct some file permissions * bubulle@debian.org--2005/apt--main--0--patch-86 Correct Hebrew translation * bubulle@debian.org--2005/apt--main--0--patch-87 Sync Portuguese translation with the POT file * bubulle@debian.org--2005/apt--main--0--patch-88 Updated Danish translation (not yet complete) * bubulle@debian.org--2005/apt--main--0--patch-89 Sync with Andre Luis Lopes and Otavio branches * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-22 * added myself to uploaders, changelog is signed with mvo@debian.org and in sync with the debian/experimental upload * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-23 * apt-cache show shows all virtual packages instead of nothing (thanks to otavio) * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-24 * changelog updated * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-25 * make pinning on component work again (we just use the section, as apt-0.6 don't use per-section Release files anymore) * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-27 * updated the changelog * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-28 * merged with my apt--fixes--0 branch * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-29 * added a missing OpProgress::Done() in depCache::Init(), removed the show-virtual-packages patch in apt-cache because matt does not like him :/ * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-30 * fix a stupid bug in the depcache::Init() code * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-31 * merged/removed conflicts with apt--main--0 * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-32 * merged apt--main and make sure that the po files come from apt--main (because they are more recent) --- apt-pkg/algorithms.cc | 11 +- apt-pkg/deb/debindexfile.cc | 4 +- apt-pkg/deb/deblistparser.cc | 11 +- apt-pkg/deb/deblistparser.h | 3 +- apt-pkg/depcache.cc | 3 + cmdline/apt-key | 6 +- configure.in | 2 +- debian/apt.postinst | 2 +- debian/changelog | 26 ++++ debian/control | 4 +- debian/rules | 2 +- po/da.po | 111 +++++++------- po/de.po | 53 +++---- po/fr.po | 339 +++++++++++++++++++++++++++++++++++++------ po/he.po | 3 +- po/pt.po | 59 +++----- po/pt_BR.po | 149 ++++++++++--------- share/debian-archive.gpg | Bin 477 -> 1303 bytes 18 files changed, 523 insertions(+), 265 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 98bd8dd8b..dd16b5dc8 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1330,11 +1330,12 @@ void pkgMarkPkgUsed(pkgDepCache &Cache, pkgCache::PkgIterator Pkg, bool pkgMarkUsed(pkgDepCache &Cache) { // debug only - for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) - if(!Cache[Pkg].Dirty() && Cache[Pkg].AutomaticRemove > 0) - std::cout << "has auto-remove information: " << Pkg.Name() - << " " << (int)Cache[Pkg].AutomaticRemove - << std::endl; + if(_config->FindI("Debug::pkgAutoRemove",false) == true) + for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) + if(!Cache[Pkg].Dirty() && Cache[Pkg].AutomaticRemove > 0) + std::cout << "has auto-remove information: " << Pkg.Name() + << " " << (int)Cache[Pkg].AutomaticRemove + << std::endl; // init with defaults for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc index f26265fff..ff8bce85d 100644 --- a/apt-pkg/deb/debindexfile.cc +++ b/apt-pkg/deb/debindexfile.cc @@ -24,7 +24,7 @@ #include #include #include - + #include /*}}}*/ @@ -290,7 +290,7 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const FileFd Rel(ReleaseFile,FileFd::ReadOnly); if (_error->PendingError() == true) return false; - Parser.LoadReleaseInfo(File,Rel); + Parser.LoadReleaseInfo(File,Rel,Section); } return true; diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 96a80582d..25b533773 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -564,13 +564,20 @@ bool debListParser::Step() // --------------------------------------------------------------------- /* */ bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator FileI, - FileFd &File) + FileFd &File, string component) { pkgTagFile Tags(&File, File.Size() + 256); // XXX pkgTagSection Section; if (Tags.Step(Section) == false) return false; + //mvo: I don't think we need to fill that in (it's unused since apt-0.6) + //FileI->Architecture = WriteUniqString(Arch); + + // apt-secure does no longer download individual (per-section) Release + // file. to provide Component pinning we use the section name now + FileI->Component = WriteUniqString(component); + const char *Start; const char *Stop; if (Section.Find("Suite",Start,Stop) == true) @@ -589,7 +596,7 @@ bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator FileI, if (Section.FindFlag("NotAutomatic",FileI->Flags, pkgCache::Flag::NotAutomatic) == false) _error->Warning("Bad NotAutomatic flag"); - + return !_error->PendingError(); } /*}}}*/ diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h index 9f305211a..3a0e0421b 100644 --- a/apt-pkg/deb/deblistparser.h +++ b/apt-pkg/deb/deblistparser.h @@ -55,7 +55,8 @@ class debListParser : public pkgCacheGenerator::ListParser virtual bool Step(); - bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,FileFd &File); + bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,FileFd &File, + string section); static const char *ParseDepends(const char *Start,const char *Stop, string &Package,string &Ver,unsigned int &Op, diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 269fe8543..54cfcb8bb 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -98,6 +98,9 @@ bool pkgDepCache::Init(OpProgress *Prog) } Update(Prog); + + if(Prog != 0) + Prog->Done(); return true; } diff --git a/cmdline/apt-key b/cmdline/apt-key index be2b19a1a..0685e36f7 100755 --- a/cmdline/apt-key +++ b/cmdline/apt-key @@ -9,14 +9,14 @@ GPG_CMD="gpg --no-options --no-default-keyring --secret-keyring /etc/apt/secring GPG="$GPG_CMD --keyring /etc/apt/trusted.gpg" -ARCHIVE_KEYRING=/usr/share/keyrings/ubuntu-archive-keyring.gpg -REMOVED_KEYS=/usr/share/keyrings/ubuntu-archive-removed-keys.gpg +ARCHIVE_KEYRING=/usr/share/keyrings/debian-archive-keyring.gpg +REMOVED_KEYS=/usr/share/keyrings/debian-archive-removed-keys.gpg update() { if [ ! -f $ARCHIVE_KEYRING ]; then echo >&2 "ERROR: Can't find the archive-keyring" - echo >&2 "Is the ubuntu-keyring package installed?" + echo >&2 "Is the debian-keyring package installed?" exit 1 fi diff --git a/configure.in b/configure.in index 806e4b6ef..a8c170d3f 100644 --- a/configure.in +++ b/configure.in @@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib) AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in) dnl -- SET THIS TO THE RELEASE VERSION -- -AC_DEFINE_UNQUOTED(VERSION,"0.6.37") +AC_DEFINE_UNQUOTED(VERSION,"0.6.38") PACKAGE="apt" AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE") AC_SUBST(PACKAGE) diff --git a/debian/apt.postinst b/debian/apt.postinst index df0433057..ae1801198 100644 --- a/debian/apt.postinst +++ b/debian/apt.postinst @@ -17,7 +17,7 @@ case "$1" in configure) if ! test -f /etc/apt/trusted.gpg; then - cp /usr/share/apt/ubuntu-archive.gpg /etc/apt/trusted.gpg + cp /usr/share/apt/debian-archive.gpg /etc/apt/trusted.gpg fi ;; diff --git a/debian/changelog b/debian/changelog index 7717705d3..ad775c230 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,29 @@ +apt (0.6.39) unstable; urgency=low + + * Welsh translation update: daf@muse.19inch.net--2005/apt--main--0--patch-6 + * Merge mvo's changes from 0.6.36ubuntu1: + michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-32 + * Merge aggregated translation updates: + bubulle@debian.org--2005/apt--main--0 + * Update priority of apt-utils to important, to match the override file + + -- + +apt (0.6.38) unstable; urgency=low + + * Merge michael.vogt@ubuntu.com--2005/apt--fixes--0--patch-6, a workaround + for the French man pages' failure to build + * Branch Debian and Ubuntu + - apt.postinst, apt-key: use the appropriate keyring + - debian/rules: install all keyrings + * Add the current Debian archive signing key (4F368D5D) to + debian-archive.gpg + * make pinning on the "component" work again (using the section of the + archive, we don't use per-section Release files anymore with apt-0.6) + (closes ubuntu #9935) + + -- Matt Zimmerman Sat, 25 Jun 2005 09:51:00 -0700 + apt (0.6.37) breezy; urgency=low * Merge bubulle@debian.org--2005/apt--main--0 up to patch-81 diff --git a/debian/control b/debian/control index b7c430997..6d9418a46 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: apt Section: admin Priority: important Maintainer: APT Development Team -Uploaders: Jason Gunthorpe , Adam Heath , Matt Zimmerman +Uploaders: Jason Gunthorpe , Adam Heath , Matt Zimmerman , Michael Vogt Standards-Version: 3.6.1 Build-Depends: debhelper (>= 4.1.62), libdb4.2-dev, gettext (>= 0.12) Build-Depends-Indep: debiandoc-sgml, docbook-utils (>= 0.6.12-1) @@ -53,7 +53,7 @@ Description: Documentation for APT development Package: apt-utils Architecture: any Depends: ${shlibs:Depends} -Priority: optional +Priority: important Provides: ${libapt-inst:provides} Replaces: apt (<< 0.5.9) Section: admin diff --git a/debian/rules b/debian/rules index e3254c2d2..d6ae540ee 100755 --- a/debian/rules +++ b/debian/rules @@ -209,7 +209,7 @@ apt: build debian/shlibs.local cp debian/bugscript debian/$@/usr/share/bug/apt/script - cp share/ubuntu-archive.gpg debian/$@/usr/share/$@ + cp share/*.gpg debian/$@/usr/share/$@ # head -n 500 ChangeLog > debian/ChangeLog diff --git a/po/da.po b/po/da.po index feade5c60..7d8f3508f 100644 --- a/po/da.po +++ b/po/da.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: apt-da\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-03-29 07:17+0200\n" -"PO-Revision-Date: 2005-02-10 20:50+0100\n" +"PO-Revision-Date: 2005-06-23 10:46+0200\n" "Last-Translator: Claus Hindsgaul \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" @@ -44,7 +44,7 @@ msgstr " Rene virtuelle pakker: " #: cmdline/apt-cache.cc:274 msgid " Single virtual packages: " -msgstr " Enkelt-virtuelle pakker: " +msgstr " Enkelte virtuelle pakker: " #: cmdline/apt-cache.cc:275 msgid " Mixed virtual packages: " @@ -259,7 +259,7 @@ msgstr "" " shell - Skal-tilstand\n" " dump - Vis opsætningen\n" "\n" -"Options:\n" +"Tilvalg:\n" " -h Denne hjælpetekst.\n" " -c=? Læs denne opsætningsfil\n" " -o=? Angiv et opsætningstilvalg. F.eks. -o dir::cache=/tmp\n" @@ -287,7 +287,7 @@ msgstr "" "apt-extracttemplates er et værktøj til at uddrage opsætnings- og skabelon-" "oplysninger fra Debianpakker\n" "\n" -"Options:\n" +"Tilvalg:\n" " -h Denne hjælpetekst\n" " -t Angiv temp-mappe\n" " -c=? Læs denne opsætningsfil\n" @@ -327,7 +327,6 @@ msgid "Error processing contents %s" msgstr "Fejl under behandling af indhold %s" #: ftparchive/apt-ftparchive.cc:551 -#, fuzzy msgid "" "Usage: apt-ftparchive [options] command\n" "Commands: packages binarypath [overridefile [pathprefix]]\n" @@ -400,10 +399,10 @@ msgstr "" " -h Denne hjælpetekst\n" " --md5 Styr generering af MD5\n" " -s=? Kilde-tvangsfil\n" -" -q Stille (vis færre statusbeskeder)\n" +" -q Stille\n" " -d=? Vælg den valgfrie mellemlager-database\n" -" --no-delink Aktivér \"delinking\" fejlsporingstilstand\n" -" --contents Bestem generering af inholdsfil\n" +" --no-delink Aktivér \"delinking\"-fejlsporingstilstand\n" +" --contents Bestem generering af indholdsfil\n" " -c=? Læs denne opsætningsfil\n" " -o=? Sæt en opsætnings-indstilling" @@ -600,7 +599,7 @@ msgstr "Kunne ikke udf #: ftparchive/multicompress.cc:363 msgid "decompressor" -msgstr "dekompressions-program" +msgstr "dekomprimerings-program" #: ftparchive/multicompress.cc:406 msgid "IO to subprocess/file failed" @@ -669,7 +668,7 @@ msgstr "F #: cmdline/apt-get.cc:399 msgid "The following packages will be REMOVED:" -msgstr "Følgende pakker vil blive FJERNET:" +msgstr "Følgende pakker vil blive AFINSTALLERET:" #: cmdline/apt-get.cc:421 msgid "The following packages have been kept back:" @@ -697,33 +696,33 @@ msgid "" "WARNING: The following essential packages will be removed\n" "This should NOT be done unless you know exactly what you are doing!" msgstr "" -"ADVARSEL: Følgende essentielle pakker vil blive fjernet\n" +"ADVARSEL: Følgende essentielle pakker vil blive afinstalleret\n" "Dette bør IKKE ske medmindre du er helt klar over, hvad du laver!" #: cmdline/apt-get.cc:575 #, c-format msgid "%lu upgraded, %lu newly installed, " -msgstr "%lu opgraderede, %lu netop installerede, " +msgstr "%lu opgraderes, %lu nyinstalleres, " #: cmdline/apt-get.cc:579 #, c-format msgid "%lu reinstalled, " -msgstr "%lu geninstallerede, " +msgstr "%lu geninstalleres, " #: cmdline/apt-get.cc:581 #, c-format msgid "%lu downgraded, " -msgstr "%lu nedgraderede, " +msgstr "%lu nedgraderes, " #: cmdline/apt-get.cc:583 #, c-format msgid "%lu to remove and %lu not upgraded.\n" -msgstr "%lu at fjerne og %lu ikke opgraderede.\n" +msgstr "%lu afinstalleres og %lu opgraderes ikke.\n" #: cmdline/apt-get.cc:587 #, c-format msgid "%lu not fully installed or removed.\n" -msgstr "%lu ikke fuldstændigt installerede eller fjernede.\n" +msgstr "%lu ikke fuldstændigt installerede eller afinstallerede.\n" #: cmdline/apt-get.cc:647 msgid "Correcting dependencies..." @@ -771,7 +770,7 @@ msgstr "Der er problemer og -y blev brugt uden --force-yes" #: cmdline/apt-get.cc:762 msgid "Packages need to be removed but remove is disabled." -msgstr "Pakker skal fjernes, men Remove er deaktiveret." +msgstr "Pakker skal afinstalleres, men Remove er deaktiveret." #: cmdline/apt-get.cc:788 cmdline/apt-get.cc:1769 cmdline/apt-get.cc:1802 msgid "Unable to lock the download directory" @@ -882,7 +881,7 @@ msgstr "" #: cmdline/apt-get.cc:1054 #, c-format msgid "Package %s is not installed, so not removed\n" -msgstr "Pakken %s er ikke installeret, så den fjernes ikke\n" +msgstr "Pakken %s er ikke installeret, så den afinstalleres ikke\n" #: cmdline/apt-get.cc:1065 #, c-format @@ -1197,13 +1196,13 @@ msgstr "" " update - Hent nye lister over pakker\n" " upgrade - Udfør en opgradering\n" " install - Installér nye pakker (pakke er libc6, ikke libc6.deb)\n" -" remove - Fjern pakker\n" +" remove - Afinstallér pakker\n" " source - Hent kildetekstarkiver\n" " build-dep - Sæt opbygningsafhængigheder op for kildetekstpakker\n" " dist-upgrade - Distributionsopgradering, se apt-get(8)\n" " dselect-upgrade - Følg valgene fra dselect\n" -" clean - Fjern hentede arkivfiler\n" -" autoclean - Fjern gamle hentede arkivfiler\n" +" clean - Slet hentede arkivfiler\n" +" autoclean - Slet gamle hentede arkivfiler\n" " check - Tjek at der ikke er uopfyldte afhængigheder\n" "\n" "Tilvalg:\n" @@ -1283,7 +1282,7 @@ msgstr "" "apt-sortpkgs er et simpelt værktøj til at sortere pakkefiler. Tilvalget -s\n" "bruges til at angive filens type.\n" "\n" -"Options:\n" +"Tilvalg:\n" " -h Denne hjælpetekst\n" " -s Benyt kildefils-sortering\n" " -c=? Læs denne opsætningsfil\n" @@ -1367,7 +1366,7 @@ msgstr "Kunne ikke l #: apt-inst/filelist.cc:384 msgid "DropNode called on still linked node" -msgstr "DropNode kaldt med endnu-forbundet knude" +msgstr "DropNode kaldt med endnu forbundet knude" #: apt-inst/filelist.cc:416 msgid "Failed to locate the hash element!" @@ -1467,7 +1466,7 @@ msgstr "Kunne ikke finde %s" #: apt-inst/deb/dpkgdb.cc:55 apt-inst/deb/dpkgdb.cc:61 #, c-format msgid "Failed to remove %s" -msgstr "Kunne ikke fjerne %s" +msgstr "Kunne ikke slette %s" #: apt-inst/deb/dpkgdb.cc:110 apt-inst/deb/dpkgdb.cc:112 #, c-format @@ -1544,7 +1543,8 @@ msgid "Internal error adding a diversion" msgstr "Intern fejl under tilføjelse af omrokering" #: apt-inst/deb/dpkgdb.cc:383 -msgid "The pkg cache must be initialized first" +#, fuzzy +msgid "The pkg cache must be initialize first" msgstr "pkg-mellemlageret skal initialiseres først" #: apt-inst/deb/dpkgdb.cc:386 @@ -2234,17 +2234,17 @@ msgstr "Ugyldig linje %lu i kildelisten %s (dist)" #: apt-pkg/sourcelist.cc:92 #, c-format msgid "Malformed line %lu in source list %s (URI parse)" -msgstr "Ugyldig linje %lu i kildelisten %s (URI parse)" +msgstr "Ugyldig linje %lu i kildelisten %s (tolkning af URI)" #: apt-pkg/sourcelist.cc:98 #, c-format msgid "Malformed line %lu in source list %s (absolute dist)" -msgstr "Ugyldig linje %lu i kildelisten %s (absolute dist)" +msgstr "Ugyldig linje %lu i kildelisten %s (absolut dist)" #: apt-pkg/sourcelist.cc:105 #, c-format msgid "Malformed line %lu in source list %s (dist parse)" -msgstr "Ugyldig linje %lu i kildelisten %s (dist parse)" +msgstr "Ugyldig linje %lu i kildelisten %s (tolkning af dist)" #: apt-pkg/sourcelist.cc:156 #, c-format @@ -2269,7 +2269,7 @@ msgstr "Typen '%s' er ukendt p #: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202 #, c-format msgid "Malformed line %u in source list %s (vendor id)" -msgstr "Ugyldig linje %u i kildelisten %s (vendor id)" +msgstr "Ugyldig linje %u i kildelisten %s (producent-id)" #: apt-pkg/packagemanager.cc:402 #, c-format @@ -2278,9 +2278,10 @@ msgid "" "package %s due to a Conflicts/Pre-Depends loop. This is often bad, but if " "you really want to do it, activate the APT::Force-LoopBreak option." msgstr "" -"Kørsel af denne installation kræver midlertidig fjernelse af den essentielle " -"pakke %s grundet en afhængighedsløkke. Det er ofte en dårlig idé, men hvis " -"du virkelig vil gøre det, kan du aktivere valget 'APT::Force-LoopBreak'." +"Kørsel af denne installation kræver midlertidig afinstallation af den " +"essentielle pakke %s grundet en afhængighedsløkke. Det er ofte en dårlig " +"idé, men hvis du virkelig vil gøre det, kan du aktivere valget 'APT::Force-" +"LoopBreak'." #: apt-pkg/pkgrecords.cc:37 #, c-format @@ -2371,38 +2372,38 @@ msgid "Cache has an incompatible versioning system" msgstr "Mellemlageret benytter en inkompatibel versionsstyring" #: apt-pkg/pkgcachegen.cc:117 -#, c-format -msgid "Error occurred while processing %s (NewPackage)" +#, fuzzy, c-format +msgid "Error occured while processing %s (NewPackage)" msgstr "Der skete en fejl under behandlingen af %s (NewPackage)" #: apt-pkg/pkgcachegen.cc:129 -#, c-format -msgid "Error occurred while processing %s (UsePackage1)" +#, fuzzy, c-format +msgid "Error occured while processing %s (UsePackage1)" msgstr "Der skete en fejl under behandlingen af %s (UsePackage1)" #: apt-pkg/pkgcachegen.cc:150 -#, c-format -msgid "Error occurred while processing %s (UsePackage2)" +#, fuzzy, c-format +msgid "Error occured while processing %s (UsePackage2)" msgstr "Der skete en fejl under behandlingen af %s (UsePackage2)" #: apt-pkg/pkgcachegen.cc:154 -#, c-format -msgid "Error occurred while processing %s (NewFileVer1)" +#, fuzzy, c-format +msgid "Error occured while processing %s (NewFileVer1)" msgstr "Der skete en fejl under behandlingen af %s (NewFileVer1)" #: apt-pkg/pkgcachegen.cc:184 -#, c-format -msgid "Error occurred while processing %s (NewVersion1)" +#, fuzzy, c-format +msgid "Error occured while processing %s (NewVersion1)" msgstr "Der skete en fejl under behandlingen af %s (NewVersion1)" #: apt-pkg/pkgcachegen.cc:188 -#, c-format -msgid "Error occurred while processing %s (UsePackage3)" +#, fuzzy, c-format +msgid "Error occured while processing %s (UsePackage3)" msgstr "Der skete en fejl under behandlingen af %s (UsePackage3)" #: apt-pkg/pkgcachegen.cc:192 -#, c-format -msgid "Error occurred while processing %s (NewVersion2)" +#, fuzzy, c-format +msgid "Error occured while processing %s (NewVersion2)" msgstr "Der skete en fejl under behandlingen af %s (NewVersion2)" #: apt-pkg/pkgcachegen.cc:207 @@ -2420,13 +2421,13 @@ msgstr "" "Hold da op! Du nåede over det antal afhængigheder, denne APT kan håndtere." #: apt-pkg/pkgcachegen.cc:241 -#, c-format -msgid "Error occurred while processing %s (FindPkg)" +#, fuzzy, c-format +msgid "Error occured while processing %s (FindPkg)" msgstr "Der skete en fejl under behandlingen af %s (FindPkg)" #: apt-pkg/pkgcachegen.cc:254 -#, c-format -msgid "Error occurred while processing %s (CollectFileProvides)" +#, fuzzy, c-format +msgid "Error occured while processing %s (CollectFileProvides)" msgstr "Der skete en fejl under behandlingen af %s (CollectfileProvides)" #: apt-pkg/pkgcachegen.cc:260 @@ -2452,11 +2453,11 @@ msgstr "IO-fejl ved gemning af kilde-mellemlageret" msgid "rename failed, %s (%s -> %s)." msgstr "omdøbning mislykkedes, %s (%s -> %s)." -#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:894 +#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:900 msgid "MD5Sum mismatch" msgstr "MD5Sum stemmer ikke" -#: apt-pkg/acquire-item.cc:708 +#: apt-pkg/acquire-item.cc:714 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " @@ -2465,7 +2466,7 @@ msgstr "" "Jeg kunne ikke lokalisere filen til %s-pakken. Det betyder muligvis at du er " "nødt til manuelt at reparere denne pakke. (grundet manglende arch)" -#: apt-pkg/acquire-item.cc:761 +#: apt-pkg/acquire-item.cc:767 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " @@ -2474,13 +2475,13 @@ msgstr "" "Jeg kunne ikke lokalisere filen til %s-pakken. Det betyder muligvis at du er " "nødt til manuelt at reparere denne pakke." -#: apt-pkg/acquire-item.cc:797 +#: apt-pkg/acquire-item.cc:803 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "Pakkeindeksfilerne er i stykker. Intet 'Filename:'-felt for pakken %s." -#: apt-pkg/acquire-item.cc:884 +#: apt-pkg/acquire-item.cc:890 msgid "Size mismatch" msgstr "Størrelsen stemmer ikke" diff --git a/po/de.po b/po/de.po index d95c9b87e..3cb0cc23e 100644 --- a/po/de.po +++ b/po/de.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: apt 0.5.26\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-03-29 07:17+0200\n" -"PO-Revision-Date: 2004-08-04 15:58 +0200\n" +"PO-Revision-Date: 2005-06-15 18:22+0200\n" "Last-Translator: Michael Piefel \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -304,7 +304,7 @@ msgstr "Kann debconf-Version nicht ermitteln. Ist debconf installiert?" #: ftparchive/apt-ftparchive.cc:163 ftparchive/apt-ftparchive.cc:337 msgid "Package extension list is too long" -msgstr "Paketerweiterungsliste is zu lang" +msgstr "Paketerweiterungsliste ist zu lang" #: ftparchive/apt-ftparchive.cc:165 ftparchive/apt-ftparchive.cc:179 #: ftparchive/apt-ftparchive.cc:202 ftparchive/apt-ftparchive.cc:252 @@ -315,7 +315,7 @@ msgstr "Fehler beim Verarbeiten von Verzeichnis %s" #: ftparchive/apt-ftparchive.cc:250 msgid "Source extension list is too long" -msgstr "Quellerweiterungsliste is zu lang" +msgstr "Quellerweiterungsliste ist zu lang" #: ftparchive/apt-ftparchive.cc:367 msgid "Error writing header to contents file" @@ -376,29 +376,22 @@ msgstr "" " generate config [gruppen]\n" " clean config\n" "\n" -"apt-ftparchive generiert Indexdateien für Debian-Archive. Es unterstützt " -"viele\n" +"apt-ftparchive generiert Indexdateien für Debian-Archive. Es unterstützt viele\n" "verschiedene Arten der Generierung, von vollautomatisch bis hin zu den\n" "funktionalen Äquivalenten von dpkg-scanpackages und dpkg-scansources.\n" "\n" -"apt-ftparchive generiert Package-Dateien aus einem Baum von .debs. Die " -"Package-\n" -"Datei enthält die Inhalt aller Kontrollfelder aus jedem Paket sowie einen " -"MD5-\n" -"Hashwert und die Dateigröße. Eine Override-Datei wird unterstützt, um Werte " -"für\n" +"apt-ftparchive generiert Package-Dateien aus einem Baum von .debs. Die Package-\n" +"Datei enthält die Inhalt aller Kontrollfelder aus jedem Paket sowie einen MD5-\n" +"Hashwert und die Dateigröße. Eine Override-Datei wird unterstützt, um Werte für\n" "Priorität und Sektion zu erzwingen.\n" "\n" -"Auf ganz ähnliche Weise erzeugt apt-ftparchive Sources-Dateien aus einem " -"Baum\n" -"von .dscs. Die Option --source-override kann benutzt werden, um eine " -"Override-\n" +"Auf ganz ähnliche Weise erzeugt apt-ftparchive Sources-Dateien aus einem Baum\n" +"von .dscs. Die Option --source-override kann benutzt werden, um eine Override-\n" "Datei für Quellen anzugeben.\n" "\n" -"Die Befehle »packages« und »source« sollten in der Wurzel des Baumes " -"aufgerufen\n" +"Die Befehle »packages« und »source« sollten in der Wurzel des Baumes aufgerufen\n" "werden. BinaryPath sollte auf die Basis der rekursiven Suche zeigen und\n" -"overridefile sollte die Override-Flags enthalten. Pfadpräfix wird wird, so\n" +"overridefile sollte die Override-Flags enthalten. Pfadpräfix wird, so\n" "vorhanden, jedem Dateinamen vorangestellt. Beispielaufruf im Debian-Archiv:\n" " apt-ftparchive packages dists/potato/main/binary-i386/ > \\\n" " dists/potato/main/binary-i386/Packages\n" @@ -1973,7 +1966,7 @@ msgstr "Auswahl %s nicht gefunden" #: apt-pkg/contrib/configuration.cc:395 #, c-format msgid "Unrecognized type abbreviation: '%c'" -msgstr "Nicht erkannte Typabkürzung: ‚%c‘" +msgstr "Nicht erkannte Typabkürzung: »%c«" #: apt-pkg/contrib/configuration.cc:453 #, c-format @@ -2070,7 +2063,7 @@ msgstr "Option %s erfordert ein Ganzzahl-Argument, nicht »%s«" #: apt-pkg/contrib/cmndline.cc:268 #, c-format msgid "Option '%s' is too long" -msgstr "Option ‚%s‘ ist zu lang" +msgstr "Option »%s« ist zu lang" #: apt-pkg/contrib/cmndline.cc:301 #, c-format @@ -2257,27 +2250,27 @@ msgstr "Kann Paketdatei %s nicht parsen (2)" #: apt-pkg/sourcelist.cc:87 #, c-format msgid "Malformed line %lu in source list %s (URI)" -msgstr "Missgestaltete Zeile %lu in Quelliste %s (»URI«)" +msgstr "Missgestaltete Zeile %lu in Quellliste %s (»URI«)" #: apt-pkg/sourcelist.cc:89 #, c-format msgid "Malformed line %lu in source list %s (dist)" -msgstr "Missgestaltete Zeile %lu in Quelliste %s (»dist«)" +msgstr "Missgestaltete Zeile %lu in Quellliste %s (»dist«)" #: apt-pkg/sourcelist.cc:92 #, c-format msgid "Malformed line %lu in source list %s (URI parse)" -msgstr "Missgestaltete Zeile %lu in Quelliste %s (»URI parse«)" +msgstr "Missgestaltete Zeile %lu in Quellliste %s (»URI parse«)" #: apt-pkg/sourcelist.cc:98 #, c-format msgid "Malformed line %lu in source list %s (absolute dist)" -msgstr "Missgestaltete Zeile %lu in Quelliste %s (»absolute dist«)" +msgstr "Missgestaltete Zeile %lu in Quellliste %s (»absolute dist«)" #: apt-pkg/sourcelist.cc:105 #, c-format msgid "Malformed line %lu in source list %s (dist parse)" -msgstr "Missgestaltete Zeile %lu in Quelliste %s (»dist parse«)" +msgstr "Missgestaltete Zeile %lu in Quellliste %s (»dist parse«)" #: apt-pkg/sourcelist.cc:156 #, c-format @@ -2287,22 +2280,22 @@ msgstr "%s wird geöffnet" #: apt-pkg/sourcelist.cc:170 #, c-format msgid "Line %u too long in source list %s." -msgstr "Zeile %u zu lang in der Quelliste %s." +msgstr "Zeile %u zu lang in der Quellliste %s." #: apt-pkg/sourcelist.cc:187 #, c-format msgid "Malformed line %u in source list %s (type)" -msgstr "Missgestaltete Zeile %u in Quelliste %s (»type«)" +msgstr "Missgestaltete Zeile %u in Quellliste %s (»type«)" #: apt-pkg/sourcelist.cc:191 #, c-format msgid "Type '%s' is not known on line %u in source list %s" -msgstr "Typ »%s« ist unbekannt in Zeile %u der Quelliste %s" +msgstr "Typ »%s« ist unbekannt in Zeile %u der Quellliste %s" #: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202 #, c-format msgid "Malformed line %u in source list %s (vendor id)" -msgstr "Missgestaltete Zeile %u in Quelliste %s (»vendor id«)" +msgstr "Missgestaltete Zeile %u in Quellliste %s (»vendor id«)" #: apt-pkg/packagemanager.cc:402 #, c-format @@ -2630,7 +2623,7 @@ msgstr "" "geschrieben.\n" #~ msgid "Unknown vendor ID '%s' in line %u of source list %s" -#~ msgstr "Unbekannte Herstellerkennung »%s« in Zeile %u der Quelliste %s" +#~ msgstr "Unbekannte Herstellerkennung »%s« in Zeile %u der Quellliste %s" #~ msgid "" #~ "Some broken packages were found while trying to process build-" diff --git a/po/fr.po b/po/fr.po index 8644bf55c..d317a2a80 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,4 +1,3 @@ -# translation of fr-save.po to French # translation of fr.po to French # Advanced Package Transfer - APT message translation catalog # French messages @@ -10,7 +9,7 @@ msgstr "" "Project-Id-Version: apt 0.5.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-03-29 07:17+0200\n" -"PO-Revision-Date: 2005-03-29 09:40+0200\n" +"PO-Revision-Date: 2005-05-26 00:44+0200\n" "Last-Translator: Christian Perrier \n" "Language-Team: French \n" "MIME-Version: 1.0\n" @@ -302,7 +301,8 @@ msgstr "Impossible d' #: cmdline/apt-extracttemplates.cc:310 msgid "Cannot get debconf version. Is debconf installed?" -msgstr "Impossible d'obtenir la version de debconf. Est-ce que debconf est installé ?" +msgstr "" +"Impossible d'obtenir la version de debconf. Est-ce que debconf est installé ?" #: ftparchive/apt-ftparchive.cc:163 ftparchive/apt-ftparchive.cc:337 msgid "Package extension list is too long" @@ -379,7 +379,7 @@ msgstr "" " clean config\n" "\n" "apt-ftparchive génère des fichiers d'index pour les archives Debian. Il\n" -"gère de nombreux types de génération, d'une automatisation complète à\n" +"supporte de nombreux types de génération, d'une automatisation complète à\n" "des remplacements fonctionnels pour dpkg-scanpackages et dpkg-scansources\n" "\n" "apt-ftparchive génère les fichiers de paquets à partir d'un arbre de .debs.\n" @@ -389,7 +389,7 @@ msgstr "" "des sections\n" "\n" "De façon similaire, apt-ftparchive génère des fichiers de source à partir\n" -"d'un arbre de .dscs. L'option --source-override peut être utilisée pour\n" +"d'un arbre de .dscs. L'option --source-override peut être employée pour\n" "spécifier un fichier src d'« override »\n" "\n" "Les commandes « packages » et « sources » devraient être démarrées à la\n" @@ -418,7 +418,8 @@ msgstr "Aucune s #: ftparchive/apt-ftparchive.cc:830 #, c-format msgid "Some files are missing in the package file group `%s'" -msgstr "Quelques fichiers sont manquants dans le groupe de fichiers de paquets « %s »" +msgstr "" +"Quelques fichiers sont manquants dans le groupe de fichiers de paquets « %s »" #: ftparchive/cachedb.cc:45 #, c-format @@ -487,7 +488,7 @@ msgstr "Impossible d'ouvrir %s" #: ftparchive/writer.cc:246 #, c-format msgid " DeLink %s [%s]\n" -msgstr " DeLink %s [%s]\n" +msgstr " Délier %s [%s]\n" #: ftparchive/writer.cc:254 #, c-format @@ -776,7 +777,8 @@ msgstr "Il y a des probl #: cmdline/apt-get.cc:762 msgid "Packages need to be removed but remove is disabled." -msgstr "Les paquets doivent être enlevés mais la désinstallation est désactivée." +msgstr "" +"Les paquets doivent être enlevés mais la désinstallation est désactivée." #: cmdline/apt-get.cc:788 cmdline/apt-get.cc:1769 cmdline/apt-get.cc:1802 msgid "Unable to lock the download directory" @@ -800,7 +802,8 @@ msgstr "Il est n #: cmdline/apt-get.cc:826 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" -msgstr "Après dépaquetage, %so d'espace disque supplémentaires seront utilisés.\n" +msgstr "" +"Après dépaquetage, %so d'espace disque supplémentaires seront utilisés.\n" #: cmdline/apt-get.cc:829 #, c-format @@ -866,7 +869,8 @@ msgstr "" #: cmdline/apt-get.cc:987 msgid "--fix-missing and media swapping is not currently supported" -msgstr "l'option --fix-missing et l'échange de support ne sont pas encore reconnus." +msgstr "" +"l'option --fix-missing et l'échange de support ne sont pas encore reconnus." #: cmdline/apt-get.cc:992 msgid "Unable to correct missing packages." @@ -928,7 +932,8 @@ msgstr "Aucun paquet ne correspond au paquet %s" #: cmdline/apt-get.cc:1129 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" -msgstr "La réinstallation de %s est impossible, il ne peut pas être téléchargé.\n" +msgstr "" +"La réinstallation de %s est impossible, il ne peut pas être téléchargé.\n" #: cmdline/apt-get.cc:1137 #, c-format @@ -982,7 +987,8 @@ msgstr "Note, s #: cmdline/apt-get.cc:1515 msgid "You might want to run `apt-get -f install' to correct these:" -msgstr "Vous pouvez lancer « apt-get -f install » pour corriger ces problèmes :" +msgstr "" +"Vous pouvez lancer « apt-get -f install » pour corriger ces problèmes :" #: cmdline/apt-get.cc:1518 msgid "" @@ -1146,7 +1152,8 @@ msgstr "Impossible de satisfaire les d #: cmdline/apt-get.cc:2282 #, c-format msgid "Build-dependencies for %s could not be satisfied." -msgstr "Les dépendances de compilation pour %s ne peuvent pas être satisfaites." +msgstr "" +"Les dépendances de compilation pour %s ne peuvent pas être satisfaites." #: cmdline/apt-get.cc:2286 msgid "Failed to process build dependencies" @@ -1329,7 +1336,8 @@ msgstr "" "seules les erreurs" #: dselect/install:103 -msgid "above this message are important. Please fix them and run [I]nstall again" +msgid "" +"above this message are important. Please fix them and run [I]nstall again" msgstr "" "précédant ce message sont importantes. Veuillez les corriger et\n" "démarrer l'[I]nstallation une nouvelle fois." @@ -1560,7 +1568,7 @@ msgid "Internal error adding a diversion" msgstr "Erreur interne en ajoutant une déviation" #: apt-inst/deb/dpkgdb.cc:383 -msgid "The pkg cache must be initialized first" +msgid "The pkg cache must be initialize first" msgstr "Le cache des paquets doit être initialisé en premier" #: apt-inst/deb/dpkgdb.cc:386 @@ -1590,7 +1598,8 @@ msgstr "Ce n'est pas une archive DEB valide, partie #: apt-inst/deb/debfile.cc:52 #, c-format msgid "This is not a valid DEB archive, it has no '%s' or '%s' member" -msgstr "Ce n'est pas une archive DEB valide, elle n'a pas de membre « %s » ou « %s »" +msgstr "" +"Ce n'est pas une archive DEB valide, elle n'a pas de membre « %s » ou « %s »" #: apt-inst/deb/debfile.cc:112 #, c-format @@ -1688,7 +1697,8 @@ msgstr "" #: methods/ftp.cc:265 #, c-format msgid "Login script command '%s' failed, server said: %s" -msgstr "La commande « %s » du script de connexion a échoué, le serveur a répondu : %s" +msgstr "" +"La commande « %s » du script de connexion a échoué, le serveur a répondu : %s" #: methods/ftp.cc:291 #, c-format @@ -1725,7 +1735,8 @@ msgstr "Impossible de cr #: methods/ftp.cc:698 msgid "Could not connect data socket, connection timed out" -msgstr "Impossible de se connecter sur le port de données, délai de connexion dépassé" +msgstr "" +"Impossible de se connecter sur le port de données, délai de connexion dépassé" #: methods/ftp.cc:704 msgid "Could not connect passive socket." @@ -2136,7 +2147,7 @@ msgstr "lu(s), %lu restant #: apt-pkg/contrib/fileutl.cc:504 #, c-format msgid "write, still have %lu to write but couldn't" -msgstr "écrit(s), %lu restant à écrire, mais l'ecriture est impossible" +msgstr "écrit(s), %lu restant à écrire, mais l'écriture est impossible" #: apt-pkg/contrib/fileutl.cc:579 msgid "Problem closing the file" @@ -2259,12 +2270,14 @@ msgstr "Ligne %lu mal form #: apt-pkg/sourcelist.cc:98 #, c-format msgid "Malformed line %lu in source list %s (absolute dist)" -msgstr "Ligne %lu mal formée dans la liste des sources %s (distribution absolue)" +msgstr "" +"Ligne %lu mal formée dans la liste des sources %s (distribution absolue)" #: apt-pkg/sourcelist.cc:105 #, c-format msgid "Malformed line %lu in source list %s (dist parse)" -msgstr "Ligne %lu mal formée dans la liste des sources %s (analyse de distribution)" +msgstr "" +"Ligne %lu mal formée dans la liste des sources %s (analyse de distribution)" #: apt-pkg/sourcelist.cc:156 #, c-format @@ -2284,12 +2297,14 @@ msgstr "Ligne %u mal form #: apt-pkg/sourcelist.cc:191 #, c-format msgid "Type '%s' is not known on line %u in source list %s" -msgstr "Le type « %s » est inconnu sur la ligne %u dans la liste des sources %s" +msgstr "" +"Le type « %s » est inconnu sur la ligne %u dans la liste des sources %s" #: apt-pkg/sourcelist.cc:199 apt-pkg/sourcelist.cc:202 #, c-format msgid "Malformed line %u in source list %s (vendor id)" -msgstr "Ligne %u mal formée dans la liste des sources %s (identifiant du fournisseur)" +msgstr "" +"Ligne %u mal formée dans la liste des sources %s (identifiant du fournisseur)" #: apt-pkg/packagemanager.cc:402 #, c-format @@ -2310,7 +2325,8 @@ msgstr "Le type de fichier d'index #: apt-pkg/algorithms.cc:241 #, c-format -msgid "The package %s needs to be reinstalled, but I can't find an archive for it." +msgid "" +"The package %s needs to be reinstalled, but I can't find an archive for it." msgstr "" "Le paquet %s doit être réinstallé, mais je ne parviens pas à trouver son " "archive." @@ -2365,7 +2381,8 @@ msgstr "Impossible de localiser %s." #: apt-pkg/srcrecords.cc:48 msgid "You must put some 'source' URIs in your sources.list" -msgstr "Vous devez insérer quelques adresses « sources » dans votre sources.list" +msgstr "" +"Vous devez insérer quelques adresses « sources » dans votre sources.list" #: apt-pkg/cachefile.cc:73 msgid "The package lists or status file could not be parsed or opened." @@ -2398,65 +2415,64 @@ msgstr "Le cache poss #: apt-pkg/pkgcachegen.cc:117 #, c-format -msgid "Error occurred while processing %s (NewPackage)" +msgid "Error occured while processing %s (NewPackage)" msgstr "Erreur apparue lors du traitement de %s (NewPackage)" #: apt-pkg/pkgcachegen.cc:129 #, c-format -msgid "Error occurred while processing %s (UsePackage1)" +msgid "Error occured while processing %s (UsePackage1)" msgstr "Erreur apparue lors du traitement de %s (UsePackage1)" #: apt-pkg/pkgcachegen.cc:150 #, c-format -msgid "Error occurred while processing %s (UsePackage2)" +msgid "Error occured while processing %s (UsePackage2)" msgstr "Erreur apparue lors du traitement de %s (UsePackage2)" #: apt-pkg/pkgcachegen.cc:154 #, c-format -msgid "Error occurred while processing %s (NewFileVer1)" +msgid "Error occured while processing %s (NewFileVer1)" msgstr "Erreur apparue lors du traitement de %s (NewFileVer1)" #: apt-pkg/pkgcachegen.cc:184 #, c-format -msgid "Error occurred while processing %s (NewVersion1)" +msgid "Error occured while processing %s (NewVersion1)" msgstr "Erreur apparue lors du traitement de %s (NewVersion1)" #: apt-pkg/pkgcachegen.cc:188 #, c-format -msgid "Error occurred while processing %s (UsePackage3)" +msgid "Error occured while processing %s (UsePackage3)" msgstr "Erreur apparue lors du traitement de %s (UsePackage3)" #: apt-pkg/pkgcachegen.cc:192 #, c-format -msgid "Error occurred while processing %s (NewVersion2)" +msgid "Error occured while processing %s (NewVersion2)" msgstr "Erreur apparue lors du traitement de %s (NewVersion2)" #: apt-pkg/pkgcachegen.cc:207 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "" -"Oula, vous avez dépassé le nombre de noms de paquets que cet APT est capable " -"de traiter." +"Vous avez dépassé le nombre de noms de paquets que cet APT est capable de " +"traiter." #: apt-pkg/pkgcachegen.cc:210 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "" -"Oula, vous avez dépassé le nombre de versions que cet APT est capable de " -"traiter." +"Vous avez dépassé le nombre de versions que cet APT est capable de traiter." #: apt-pkg/pkgcachegen.cc:213 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" -"Oula, vous avez dépassé le nombre de dépendances que cet APT est capable de " +"Vous avez dépassé le nombre de dépendances que cet APT est capable de " "traiter." #: apt-pkg/pkgcachegen.cc:241 #, c-format -msgid "Error occurred while processing %s (FindPkg)" +msgid "Error occured while processing %s (FindPkg)" msgstr "Erreur apparue lors du traitement de %s (FindPkg)" #: apt-pkg/pkgcachegen.cc:254 #, c-format -msgid "Error occurred while processing %s (CollectFileProvides)" +msgid "Error occured while processing %s (CollectFileProvides)" msgstr "Erreur apparue lors du traitement de %s (CollectFileProvides)" #: apt-pkg/pkgcachegen.cc:260 @@ -2477,18 +2493,19 @@ msgstr "Assemblage des fichiers list #: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 msgid "IO Error saving source cache" -msgstr "Erreur d'entrée/sortie lors de la sauvegarde du fichier de cache des sources" +msgstr "" +"Erreur d'entrée/sortie lors de la sauvegarde du fichier de cache des sources" #: apt-pkg/acquire-item.cc:126 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "impossible de changer le nom, %s (%s -> %s)." -#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:894 +#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:900 msgid "MD5Sum mismatch" msgstr "Somme de contrôle MD5 incohérente" -#: apt-pkg/acquire-item.cc:708 +#: apt-pkg/acquire-item.cc:714 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " @@ -2498,7 +2515,7 @@ msgstr "" "sans doute que vous devrez corriger ce paquet manuellement (absence " "d'architecture)." -#: apt-pkg/acquire-item.cc:761 +#: apt-pkg/acquire-item.cc:767 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " @@ -2507,14 +2524,15 @@ msgstr "" "Je ne suis pas parvenu à localiser un fichier du paquet %s. Ceci signifie " "que vous devrez corriger manuellement ce paquet." -#: apt-pkg/acquire-item.cc:797 +#: apt-pkg/acquire-item.cc:803 #, c-format -msgid "The package index files are corrupted. No Filename: field for package %s." +msgid "" +"The package index files are corrupted. No Filename: field for package %s." msgstr "" "Les fichiers d'index des paquets sont corrompus. Aucun champ « Filename: » " "pour le paquet %s." -#: apt-pkg/acquire-item.cc:884 +#: apt-pkg/acquire-item.cc:890 msgid "Size mismatch" msgstr "Taille incohérente" @@ -2619,8 +2637,237 @@ msgstr "" "%i enregistrements écrits avec %i fichiers manquants et %i qui ne " "correspondent pas\n" +#~ msgid "Total Package Names : " +#~ msgstr "Nombre total de paquets : " + +#~ msgid " Normal Packages: " +#~ msgstr " Paquets ordinaires : " + +#~ msgid " Pure Virtual Packages: " +#~ msgstr " Paquets entièrement virtuels : " + +#~ msgid " Single Virtual Packages: " +#~ msgstr " Paquets virtuels simples : " + +#~ msgid " Mixed Virtual Packages: " +#~ msgstr " Paquets virtuels mixtes : " + +#~ msgid "Total Distinct Versions: " +#~ msgstr "Nombre de versions distinctes : " + +#~ msgid "Total Dependencies: " +#~ msgstr "Nombre de dépendances : " + +#~ msgid "Total Ver/File relations: " +#~ msgstr "Nombre de relations version/fichier : " + +#~ msgid "Total Provides Mappings: " +#~ msgstr "Nombre de relations « Provides » : " + +#~ msgid "Total Globbed Strings: " +#~ msgstr "Nombre de motifs rationnels : " + +#~ msgid "Total Dependency Version space: " +#~ msgstr "Espace occupé par les versions des dépendances : " + +#~ msgid "Total Slack space: " +#~ msgstr "Espace disque gaspillé : " + +#~ msgid "Total Space Accounted for: " +#~ msgstr "Total de l'espace attribué : " + +#~ msgid "Package Files:" +#~ msgstr "Fichiers du paquet :" + +#~ msgid "Pinned Packages:" +#~ msgstr "Paquets étiquetés :" + +#~ msgid " Package Pin: " +#~ msgstr " Étiquette de paquet : " + +#~ msgid " Version Table:" +#~ msgstr " Table de version :" + +#~ msgid "Error Processing directory %s" +#~ msgstr "Erreur lors du traitement du répertoire %s" + +#~ msgid "Error Processing Contents %s" +#~ msgstr "Erreur du traitement du contenu %s" + +#~ msgid "Unknown Compresison Algorithm '%s'" +#~ msgstr "Algorithme de compression « %s » inconnu" + +#~ msgid "Compress Child" +#~ msgstr "Fils compressé" + +#~ msgid "Internal Error, Failed to create %s" +#~ msgstr "Erreur interne, impossible de créer %s" + +#~ msgid "Packages need to be removed but Remove is disabled." +#~ msgstr "" +#~ "Les paquets doivent être enlevés mais la désinstallation est désactivée." + +#~ msgid "Do you want to continue? [Y/n] " +#~ msgstr "Souhaitez-vous continuer ? [O/n] " + +#~ msgid "Aborting Install." +#~ msgstr "Annulation de l'installation." + +#~ msgid "Internal Error, AllUpgrade broke stuff" +#~ msgstr "Erreur interne, AllUpgrade a cassé le boulot !" + +#~ msgid "Calculating Upgrade... " +#~ msgstr "Calcul de la mise à jour... " + +#~ msgid "Fetch Source %s\n" +#~ msgstr "Récupération des sources %s\n" + +#~ msgid "Supported Modules:" +#~ msgstr "Modules reconnus :" + +#~ msgid "" +#~ "Media Change: Please insert the disc labeled\n" +#~ " '%s'\n" +#~ "in the drive '%s' and press enter\n" +#~ msgstr "" +#~ "Changement de support : veuillez insérer le disque\n" +#~ "« %s »\n" +#~ "dans le lecteur « %s » et appuyez sur la touche Entrée\n" + +#~ msgid "Merging Available information" +#~ msgstr "Fusion des informations disponibles" + +#~ msgid "Tar Checksum failed, archive corrupted" +#~ msgstr "Échec dans la somme de contrôle de tar, l'archive est corrompue" + +#~ msgid "Internal Error in AddDiversion" +#~ msgstr "Erreur interne dans AddDiversion" + +#~ msgid "Reading Package Lists" +#~ msgstr "Lecture des listes de paquets" + +#~ msgid "Internal Error getting a Package Name" +#~ msgstr "Erreur interne lors de l'obtention d'un nom de paquet" + +#~ msgid "Reading File Listing" +#~ msgstr "Lecture de la liste de fichiers" + +#~ msgid "Internal Error getting a Node" +#~ msgstr "Erreur interne lors de l'obtention d'un N½ud" + +#~ msgid "Internal Error adding a diversion" +#~ msgstr "Erreur interne en ajoutant une déviation" + +#~ msgid "Reading File List" +#~ msgstr "Lecture de la liste des fichiers" + +#~ msgid "Failed to find a Package: Header, offset %lu" +#~ msgstr "Impossible de trouver un en-tête « Package: », décalage %lu" + +#~ msgid "Internal Error, could not locate member %s" +#~ msgstr "Erreur interne, ne peut localiser la partie %s" + +#~ msgid "Internal Error, could not locate member" +#~ msgstr "Erreur interne, ne peut localiser le membre" + +#~ msgid "Unparsible control file" +#~ msgstr "Fichier de contrôle non traitable" + +#~ msgid "" +#~ "Please use apt-cdrom to make this CD recognized by APT. apt-get update " +#~ "cannot be used to add new CDs" +#~ msgstr "" +#~ "Veuillez utiliser apt-cdrom afin de faire reconnaître ce cédérom par " +#~ "votre APT. apt-get update ne peut être employé pour ajouter de nouveaux " +#~ "cédéroms" + +#~ msgid "Wrong CD" +#~ msgstr "Mauvais cédérom" + +#~ msgid "Server refused our connection and said: %s" +#~ msgstr "Le serveur a refusé notre connexion et a répondu : %s" + +#~ msgid "Write Error" +#~ msgstr "Erreur d'écriture" + +#~ msgid "The http server sent an invalid reply header" +#~ msgstr "Le serveur http a envoyé une réponse dont l'en-tête est invalide" + +#~ msgid "The http server sent an invalid Content-Length header" +#~ msgstr "Le serveur http a envoyé un en-tête « Content-Length » invalide" + +#~ msgid "The http server sent an invalid Content-Range header" +#~ msgstr "Le serveur http a envoyé un en-tête « Content-Range » invalide" + +#~ msgid "This http server has broken range support" +#~ msgstr "Ce serveur http possède un support des limites non-valide" + +#~ msgid "Error reading from server Remote end closed connection" +#~ msgstr "" +#~ "Erreur de lecture depuis le serveur distant et clôture de la connexion" + +#~ msgid "Bad header Data" +#~ msgstr "Mauvais en-tête de donnée" + +#~ msgid "Syntax error %s:%u: Malformed Tag" +#~ msgstr "Erreur syntaxique %s:%u : balise mal formée" + +#~ msgid "Waited, for %s but it wasn't there" +#~ msgstr "A attendu %s mais il n'était pas présent" + +#~ msgid "This APT does not support the Versioning System '%s'" +#~ msgstr "Cet APT ne supporte pas le système de version « %s »" + +#~ msgid "Building Dependency Tree" +#~ msgstr "Construction de l'arbre des dépendances" + +#~ msgid "Candidate Versions" +#~ msgstr "Versions possibles" + +#~ msgid "Dependency Generation" +#~ msgstr "Génération des dépendances" + +#~ msgid "Malformed line %lu in source list %s (Absolute dist)" +#~ msgstr "" +#~ "Ligne %lu mal formée dans la liste des sources %s (distribution absolue)" + +#~ msgid "Vendor block %s is invalid" +#~ msgstr "Bloc de fournisseur %s invalide" + #~ msgid "Unknown vendor ID '%s' in line %u of source list %s" #~ msgstr "" #~ "Identifiant « %s » du fournisseur inconnu dans la ligne %u de la liste " #~ "des sources %s" +#~ msgid "File Not Found" +#~ msgstr "Fichier non trouvé" + +#~ msgid "The pkg cache must be initialized first" +#~ msgstr "Le cache des paquets doit être initialisé en premier" + +#~ msgid "Error occurred while processing %s (NewPackage)" +#~ msgstr "Erreur apparue lors du traitement de %s (NewPackage)" + +#~ msgid "Error occurred while processing %s (UsePackage1)" +#~ msgstr "Erreur apparue lors du traitement de %s (UsePackage1)" + +#~ msgid "Error occurred while processing %s (UsePackage2)" +#~ msgstr "Erreur apparue lors du traitement de %s (UsePackage2)" + +#~ msgid "Error occurred while processing %s (NewFileVer1)" +#~ msgstr "Erreur apparue lors du traitement de %s (NewFileVer1)" + +#~ msgid "Error occurred while processing %s (NewVersion1)" +#~ msgstr "Erreur apparue lors du traitement de %s (NewVersion1)" + +#~ msgid "Error occurred while processing %s (UsePackage3)" +#~ msgstr "Erreur apparue lors du traitement de %s (UsePackage3)" + +#~ msgid "Error occurred while processing %s (NewVersion2)" +#~ msgstr "Erreur apparue lors du traitement de %s (NewVersion2)" + +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Erreur apparue lors du traitement de %s (FindPkg)" + +#~ msgid "Error occurred while processing %s (CollectFileProvides)" +#~ msgstr "Erreur apparue lors du traitement de %s (CollectFileProvides)" diff --git a/po/he.po b/po/he.po index 242155eff..189370945 100644 --- a/po/he.po +++ b/po/he.po @@ -639,8 +639,7 @@ msgstr "×œ× ×ž×¦×œ×™×— לתקן תלויות" #: cmdline/apt-get.cc:656 msgid "Unable to minimize the upgrade set" msgstr "" -"× ×– ×” ר ×”: החבילות החיוניות הב×ות יוסרו\n" -"על הפעולה להעשות *רק* ×× ×תה יודע מה ×תה עושה!" +"× ×– ×” ר ×”: החבילות החיוניות הב×ות יוסרו" #: cmdline/apt-get.cc:658 msgid " Done" diff --git a/po/pt.po b/po/pt.po index 21912759b..4b1568efe 100644 --- a/po/pt.po +++ b/po/pt.po @@ -2602,54 +2602,35 @@ msgstr "" "Escreveu %i registos com %i ficheiros em falta e %i ficheiros não " "coincidentes\n" -#: apt-inst/deb/dpkgdb.cc:383 -msgid "The pkg cache must be initialized first" -msgstr "A cache de pacotes tem de ser inicializada primeiro" +#~ msgid "The pkg cache must be initialized first" +#~ msgstr "A cache de pacotes tem de ser inicializada primeiro" -#: apt-pkg/pkgcachegen.cc:117 -#, c-format -msgid "Error occurred while processing %s (NewPackage)" -msgstr "Um erro ocorreu ao processar %s (NovoPacote)" +#~ msgid "Error occurred while processing %s (NewPackage)" +#~ msgstr "Um erro ocorreu ao processar %s (NovoPacote)" -#: apt-pkg/pkgcachegen.cc:129 -#, c-format -msgid "Error occurred while processing %s (UsePackage1)" -msgstr "Um erro ocorreu ao processar %s (UsePacote1)" +#~ msgid "Error occurred while processing %s (UsePackage1)" +#~ msgstr "Um erro ocorreu ao processar %s (UsePacote1)" -#: apt-pkg/pkgcachegen.cc:150 -#, c-format -msgid "Error occurred while processing %s (UsePackage2)" -msgstr "Um erro ocorreu ao processar %s (UsePacote2)" +#~ msgid "Error occurred while processing %s (UsePackage2)" +#~ msgstr "Um erro ocorreu ao processar %s (UsePacote2)" -#: apt-pkg/pkgcachegen.cc:154 -#, c-format -msgid "Error occurred while processing %s (NewFileVer1)" -msgstr "Um erro ocorreu ao processar %s (NovoArquivoVer1)" +#~ msgid "Error occurred while processing %s (NewFileVer1)" +#~ msgstr "Um erro ocorreu ao processar %s (NovoArquivoVer1)" -#: apt-pkg/pkgcachegen.cc:184 -#, c-format -msgid "Error occurred while processing %s (NewVersion1)" -msgstr "Um erro ocorreu ao processar %s (NovaVersão1)" +#~ msgid "Error occurred while processing %s (NewVersion1)" +#~ msgstr "Um erro ocorreu ao processar %s (NovaVersão1)" -#: apt-pkg/pkgcachegen.cc:188 -#, c-format -msgid "Error occurred while processing %s (UsePackage3)" -msgstr "Um erro ocorreu ao processar %s (UsePacote3)" +#~ msgid "Error occurred while processing %s (UsePackage3)" +#~ msgstr "Um erro ocorreu ao processar %s (UsePacote3)" -#: apt-pkg/pkgcachegen.cc:192 -#, c-format -msgid "Error occurred while processing %s (NewVersion2)" -msgstr "Um erro ocorreu ao processar %s (NovaVersão2)" +#~ msgid "Error occurred while processing %s (NewVersion2)" +#~ msgstr "Um erro ocorreu ao processar %s (NovaVersão2)" -#: apt-pkg/pkgcachegen.cc:241 -#, c-format -msgid "Error occurred while processing %s (FindPkg)" -msgstr "Um erro ocorreu ao processar %s (FindPkg)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Um erro ocorreu ao processar %s (FindPkg)" -#: apt-pkg/pkgcachegen.cc:254 -#, c-format -msgid "Error occurred while processing %s (CollectFileProvides)" -msgstr "Um erro ocorreu ao processar %s (CollectFileProvides)" +#~ msgid "Error occurred while processing %s (CollectFileProvides)" +#~ msgstr "Um erro ocorreu ao processar %s (CollectFileProvides)" #~ msgid "Unknown vendor ID '%s' in line %u of source list %s" #~ msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index 8e1525db7..82271928b 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -6,13 +6,13 @@ msgid "" msgstr "" "Project-Id-Version: apt\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-03-29 07:17+0200\n" -"PO-Revision-Date: 2005-02-13 15:18-0200\n" +"Report-Msgid-Bugs-To: debian-l10n-portuguese@lists.debian.org\n" +"POT-Creation-Date: 2005-05-23 11:34+0200\n" +"PO-Revision-Date: 2005-06-16 10:24-0300\n" "Last-Translator: André Luís Lopes \n" "Language-Team: Debian-BR Project \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: cmdline/apt-cache.cc:135 @@ -149,7 +149,7 @@ msgstr " %4i %s\n" #: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:545 -#: cmdline/apt-get.cc:2313 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2322 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "%s %s para %s %s compilado em %s %s\n" @@ -325,7 +325,6 @@ msgid "Error processing contents %s" msgstr "Erro processando Conteúdo %s" #: ftparchive/apt-ftparchive.cc:551 -#, fuzzy msgid "" "Usage: apt-ftparchive [options] command\n" "Commands: packages binarypath [overridefile [pathprefix]]\n" @@ -378,7 +377,7 @@ msgstr "" "suporta muitos estilos de geração, desde totalmente automatizadas até \n" "substitutos funcionais para o dpkg-scanpackages e dpkg-scansources\n" "\n" -"O apt-ftparchive gera arquivos Packages a partir de uma árvore de .debs.\n" +"O apt-ftparchive gera arquivos Package a partir de uma árvore de .debs.\n" " O arquivo Package contém o conteúdo de todos os campos control de \n" "cada pacote bem como o hash MD5 e tamanho de arquivo. Um arquivo \n" "override é suportado para forçar o valor de Priority e Section.\n" @@ -623,7 +622,7 @@ msgstr "Falha ao renomear %s para %s" msgid "Y" msgstr "S" -#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1475 +#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1484 #, c-format msgid "Regex compilation error - %s" msgstr "Erro de compilação de regex - %s" @@ -772,11 +771,11 @@ msgstr "H msgid "Packages need to be removed but remove is disabled." msgstr "Pacotes precisam ser removidos mas a remoção está desabilitada." -#: cmdline/apt-get.cc:788 cmdline/apt-get.cc:1769 cmdline/apt-get.cc:1802 +#: cmdline/apt-get.cc:788 cmdline/apt-get.cc:1778 cmdline/apt-get.cc:1811 msgid "Unable to lock the download directory" msgstr "Impossível criar lock no diretório de download" -#: cmdline/apt-get.cc:798 cmdline/apt-get.cc:1850 cmdline/apt-get.cc:2061 +#: cmdline/apt-get.cc:798 cmdline/apt-get.cc:1859 cmdline/apt-get.cc:2070 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "A lista de fontes não pôde ser lida." @@ -834,7 +833,7 @@ msgstr "Abortado." msgid "Do you want to continue [Y/n]? " msgstr "Quer continuar [S/n] ? " -#: cmdline/apt-get.cc:958 cmdline/apt-get.cc:1334 cmdline/apt-get.cc:1959 +#: cmdline/apt-get.cc:958 cmdline/apt-get.cc:1334 cmdline/apt-get.cc:1968 #, c-format msgid "Failed to fetch %s %s\n" msgstr "Falha ao baixar %s %s\n" @@ -843,7 +842,7 @@ msgstr "Falha ao baixar %s %s\n" msgid "Some files failed to download" msgstr "Alguns arquivos falharam ao baixar" -#: cmdline/apt-get.cc:977 cmdline/apt-get.cc:1968 +#: cmdline/apt-get.cc:977 cmdline/apt-get.cc:1977 msgid "Download complete and in download only mode" msgstr "Download completo e em modo de apenas download" @@ -946,7 +945,7 @@ msgstr "Vers msgid "The update command takes no arguments" msgstr "O comando update não leva argumentos" -#: cmdline/apt-get.cc:1295 +#: cmdline/apt-get.cc:1295 cmdline/apt-get.cc:1389 msgid "Unable to lock the list directory" msgstr "Impossível criar lock no diretório de listas" @@ -962,21 +961,21 @@ msgstr "" msgid "Internal error, AllUpgrade broke stuff" msgstr "Erro Interno, AllUpgrade quebrou as coisas" -#: cmdline/apt-get.cc:1462 cmdline/apt-get.cc:1498 +#: cmdline/apt-get.cc:1471 cmdline/apt-get.cc:1507 #, c-format msgid "Couldn't find package %s" msgstr "Impossível achar pacote %s" -#: cmdline/apt-get.cc:1485 +#: cmdline/apt-get.cc:1494 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "Nota, selecionando %s para expressão regular '%s'\n" -#: cmdline/apt-get.cc:1515 +#: cmdline/apt-get.cc:1524 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "Você deve querer rodar `apt-get -f install' para corrigir isso:" -#: cmdline/apt-get.cc:1518 +#: cmdline/apt-get.cc:1527 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." @@ -984,7 +983,7 @@ msgstr "" "Dependências desencontradas. Tente `apt-get -f install' sem nenhum pacote " "(ou especifique uma solução)." -#: cmdline/apt-get.cc:1530 +#: cmdline/apt-get.cc:1539 msgid "" "Some packages could not be installed. This may mean that you have\n" "requested an impossible situation or if you are using the unstable\n" @@ -996,7 +995,7 @@ msgstr "" "distribuição instável, que alguns pacotes requeridos não foram \n" "criados ainda ou foram tirados do Incoming." -#: cmdline/apt-get.cc:1538 +#: cmdline/apt-get.cc:1547 msgid "" "Since you only requested a single operation it is extremely likely that\n" "the package is simply not installable and a bug report against\n" @@ -1006,107 +1005,107 @@ msgstr "" "esteja simplesmente não instalável e um relato de erro sobre esse\n" "pacotes deve ser enviado." -#: cmdline/apt-get.cc:1543 +#: cmdline/apt-get.cc:1552 msgid "The following information may help to resolve the situation:" msgstr "A informação a seguir pode ajudar a resolver a situação:" -#: cmdline/apt-get.cc:1546 +#: cmdline/apt-get.cc:1555 msgid "Broken packages" msgstr "Pacotes quebrados" -#: cmdline/apt-get.cc:1572 +#: cmdline/apt-get.cc:1581 msgid "The following extra packages will be installed:" msgstr "Os pacotes extra a seguir serão instalados:" -#: cmdline/apt-get.cc:1643 +#: cmdline/apt-get.cc:1652 msgid "Suggested packages:" msgstr "Pacotes sugeridos :" -#: cmdline/apt-get.cc:1644 +#: cmdline/apt-get.cc:1653 msgid "Recommended packages:" msgstr "Pacotes recomendados :" -#: cmdline/apt-get.cc:1664 +#: cmdline/apt-get.cc:1673 msgid "Calculating upgrade... " msgstr "Calculando Atualização... " -#: cmdline/apt-get.cc:1667 methods/ftp.cc:702 methods/connect.cc:99 +#: cmdline/apt-get.cc:1676 methods/ftp.cc:702 methods/connect.cc:99 msgid "Failed" msgstr "Falhou" -#: cmdline/apt-get.cc:1672 +#: cmdline/apt-get.cc:1681 msgid "Done" msgstr "Pronto" -#: cmdline/apt-get.cc:1845 +#: cmdline/apt-get.cc:1854 msgid "Must specify at least one package to fetch source for" msgstr "Deve-se especificar pelo menos um pacote para que se baixe o fonte" -#: cmdline/apt-get.cc:1872 cmdline/apt-get.cc:2079 +#: cmdline/apt-get.cc:1881 cmdline/apt-get.cc:2088 #, c-format msgid "Unable to find a source package for %s" msgstr "Impossível encontrar um pacote fonte para %s" -#: cmdline/apt-get.cc:1919 +#: cmdline/apt-get.cc:1928 #, c-format msgid "You don't have enough free space in %s" msgstr "Você não possui espaço livre suficiente em %s" -#: cmdline/apt-get.cc:1924 +#: cmdline/apt-get.cc:1933 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "Preciso pegar %sB/%sB de arquivos fonte.\n" -#: cmdline/apt-get.cc:1927 +#: cmdline/apt-get.cc:1936 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "Precisa obter %sB de arquivos fonte.\n" -#: cmdline/apt-get.cc:1933 +#: cmdline/apt-get.cc:1942 #, c-format msgid "Fetch source %s\n" msgstr "Obter Fonte %s\n" -#: cmdline/apt-get.cc:1964 +#: cmdline/apt-get.cc:1973 msgid "Failed to fetch some archives." msgstr "Falha ao fazer o download de alguns arquivos." -#: cmdline/apt-get.cc:1992 +#: cmdline/apt-get.cc:2001 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "Pulando desempacotamento de pacote fonte já desempacotado em %s\n" -#: cmdline/apt-get.cc:2004 +#: cmdline/apt-get.cc:2013 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "Comando de desempacotamento '%s' falhou.\n" -#: cmdline/apt-get.cc:2021 +#: cmdline/apt-get.cc:2030 #, c-format msgid "Build command '%s' failed.\n" msgstr "Comando de construção '%s' falhou.\n" -#: cmdline/apt-get.cc:2040 +#: cmdline/apt-get.cc:2049 msgid "Child process failed" msgstr "Processo filho falhou" -#: cmdline/apt-get.cc:2056 +#: cmdline/apt-get.cc:2065 msgid "Must specify at least one package to check builddeps for" msgstr "" "Deve-se especificar pelo menos um pacote para que se cheque as dependências " "de construção" -#: cmdline/apt-get.cc:2084 +#: cmdline/apt-get.cc:2093 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "Impossível conseguir informações de dependência de construção para %s" -#: cmdline/apt-get.cc:2104 +#: cmdline/apt-get.cc:2113 #, c-format msgid "%s has no build depends.\n" msgstr "%s não tem dependências de construção.\n" -#: cmdline/apt-get.cc:2156 +#: cmdline/apt-get.cc:2165 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " @@ -1115,7 +1114,7 @@ msgstr "" "a dependência de %s por %s não pôde ser satisfeita porque o pacote %s não " "pôde ser encontrado" -#: cmdline/apt-get.cc:2208 +#: cmdline/apt-get.cc:2217 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " @@ -1124,32 +1123,32 @@ msgstr "" "a dependência de %s por %s não pode ser satisfeita porque nenhuma versão " "disponível do pacote %s pode satisfazer os requerimentos de versão" -#: cmdline/apt-get.cc:2243 +#: cmdline/apt-get.cc:2252 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" "Falha ao satisfazer a dependência %s para %s: Pacote instalado %s é muito " "novo" -#: cmdline/apt-get.cc:2268 +#: cmdline/apt-get.cc:2277 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "Falha ao satisfazer dependência %s para %s: %s" -#: cmdline/apt-get.cc:2282 +#: cmdline/apt-get.cc:2291 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "Não foi possível satisfazer as dependências de compilação para %s." -#: cmdline/apt-get.cc:2286 +#: cmdline/apt-get.cc:2295 msgid "Failed to process build dependencies" msgstr "Falha ao processar as dependências de construção" -#: cmdline/apt-get.cc:2318 +#: cmdline/apt-get.cc:2327 msgid "Supported modules:" msgstr "Módulos Suportados:" -#: cmdline/apt-get.cc:2359 +#: cmdline/apt-get.cc:2368 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1549,7 +1548,7 @@ msgid "Internal error adding a diversion" msgstr "Erro Interno ao adicionar um desvio" #: apt-inst/deb/dpkgdb.cc:383 -msgid "The pkg cache must be initialized first" +msgid "The pkg cache must be initialize first" msgstr "O cache de pacotes deve ser inicializado primeiro" #: apt-inst/deb/dpkgdb.cc:386 @@ -1758,7 +1757,7 @@ msgstr "Conex msgid "Unable to accept connection" msgstr "Impossível aceitar conexão" -#: methods/ftp.cc:864 methods/http.cc:916 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:920 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "Problema fazendo o hash do arquivo" @@ -1885,43 +1884,43 @@ msgstr "Este servidor http possui suporte a range quebrado" msgid "Unknown date format" msgstr "Formato de data desconhecido" -#: methods/http.cc:737 +#: methods/http.cc:741 msgid "Select failed" msgstr "Seleção falhou." -#: methods/http.cc:742 +#: methods/http.cc:746 msgid "Connection timed out" msgstr "Conexão expirou" -#: methods/http.cc:765 +#: methods/http.cc:769 msgid "Error writing to output file" msgstr "Erro gravando para arquivo de saída" -#: methods/http.cc:793 +#: methods/http.cc:797 msgid "Error writing to file" msgstr "Erro gravando para arquivo" -#: methods/http.cc:818 +#: methods/http.cc:822 msgid "Error writing to the file" msgstr "Erro gravando para o arquivo" -#: methods/http.cc:832 +#: methods/http.cc:836 msgid "Error reading from server. Remote end closed connection" msgstr "Erro lendo do servidor Ponto remoto fechou a conexão" -#: methods/http.cc:834 +#: methods/http.cc:838 msgid "Error reading from server" msgstr "Erro lendo do servidor" -#: methods/http.cc:1065 +#: methods/http.cc:1069 msgid "Bad header data" msgstr "Dados de cabeçalho ruins" -#: methods/http.cc:1082 +#: methods/http.cc:1086 msgid "Connection failed" msgstr "Conexão falhou." -#: methods/http.cc:1173 +#: methods/http.cc:1177 msgid "Internal error" msgstr "Erro interno" @@ -2384,37 +2383,37 @@ msgstr "O Cache possui um sistema de vers #: apt-pkg/pkgcachegen.cc:117 #, c-format -msgid "Error occurred while processing %s (NewPackage)" +msgid "Error occured while processing %s (NewPackage)" msgstr "Um erro ocorreu processando %s (NovoPacote)" #: apt-pkg/pkgcachegen.cc:129 #, c-format -msgid "Error occurred while processing %s (UsePackage1)" +msgid "Error occured while processing %s (UsePackage1)" msgstr "Um erro ocorreu processando %s (UsePacote1)" #: apt-pkg/pkgcachegen.cc:150 #, c-format -msgid "Error occurred while processing %s (UsePackage2)" +msgid "Error occured while processing %s (UsePackage2)" msgstr "Um erro ocorreu processando %s (UsePacote2)" #: apt-pkg/pkgcachegen.cc:154 #, c-format -msgid "Error occurred while processing %s (NewFileVer1)" +msgid "Error occured while processing %s (NewFileVer1)" msgstr "Um erro ocorreu processando %s (NovoArquivoVer1)" #: apt-pkg/pkgcachegen.cc:184 #, c-format -msgid "Error occurred while processing %s (NewVersion1)" +msgid "Error occured while processing %s (NewVersion1)" msgstr "Um erro ocorreu processando %s (NovaVersão1)" #: apt-pkg/pkgcachegen.cc:188 #, c-format -msgid "Error occurred while processing %s (UsePackage3)" +msgid "Error occured while processing %s (UsePackage3)" msgstr "Um erro ocorreu processando %s (UsePacote3)" #: apt-pkg/pkgcachegen.cc:192 #, c-format -msgid "Error occurred while processing %s (NewVersion2)" +msgid "Error occured while processing %s (NewVersion2)" msgstr "Um erro ocorreu processando %s (NovaVersão2)" #: apt-pkg/pkgcachegen.cc:207 @@ -2435,12 +2434,12 @@ msgstr "" #: apt-pkg/pkgcachegen.cc:241 #, c-format -msgid "Error occurred while processing %s (FindPkg)" +msgid "Error occured while processing %s (FindPkg)" msgstr "Um erro ocorreu processando %s (FindPkg)" #: apt-pkg/pkgcachegen.cc:254 #, c-format -msgid "Error occurred while processing %s (CollectFileProvides)" +msgid "Error occured while processing %s (CollectFileProvides)" msgstr "Um erro ocorreu processando %s (CollectFileProvides)" #: apt-pkg/pkgcachegen.cc:260 @@ -2466,11 +2465,11 @@ msgstr "Erro de I/O ao gravar cache fonte" msgid "rename failed, %s (%s -> %s)." msgstr "renomeação falhou, %s (%s -> %s)." -#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:894 +#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:900 msgid "MD5Sum mismatch" msgstr "MD5Sum incorreto" -#: apt-pkg/acquire-item.cc:708 +#: apt-pkg/acquire-item.cc:714 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " @@ -2480,7 +2479,7 @@ msgstr "" "que você precisa consertar manualmente este pacote. (devido a arquitetura " "não especificada)." -#: apt-pkg/acquire-item.cc:761 +#: apt-pkg/acquire-item.cc:767 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " @@ -2489,7 +2488,7 @@ msgstr "" "Não foi possível localizar arquivo para o pacote %s. Isto pode significar " "que você precisa consertar manualmente este pacote." -#: apt-pkg/acquire-item.cc:797 +#: apt-pkg/acquire-item.cc:803 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." @@ -2497,7 +2496,7 @@ msgstr "" "Os arquivos de índice de pacotes estão corrompidos. Nenhum campo Filename: " "para o pacote %s." -#: apt-pkg/acquire-item.cc:884 +#: apt-pkg/acquire-item.cc:890 msgid "Size mismatch" msgstr "Tamanho incorreto" diff --git a/share/debian-archive.gpg b/share/debian-archive.gpg index 0db59e674..c391d8fa1 100644 Binary files a/share/debian-archive.gpg and b/share/debian-archive.gpg differ -- cgit v1.2.3-70-g09d2 From 120365cee294d00706928b0327ac755ab3448eca Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 28 Jun 2005 08:41:51 +0000 Subject: * cleanups, documentation updates (don't show any debug output if no Debug::pkgAutomaticRemove was set, don't remove if not APT::Get::AutomaticRemove (--automatic-remove) was set) --- apt-pkg/algorithms.cc | 7 +++++-- apt-pkg/depcache.cc | 6 ++++-- cmdline/apt-get.cc | 9 +++++---- configure.in | 2 +- doc/examples/configure-index | 4 +++- 5 files changed, 18 insertions(+), 10 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index dd16b5dc8..5167d11eb 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1066,7 +1066,10 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) pkgCache::PkgIterator I = Cache.PkgBegin(); for (;I.end() != true; I++) { if (Cache[I].NewInstall() && !(Flags[I->ID] & PreInstalled)) { - std::cout << "Resolve installed new pkg: " << I.Name() << " (now marking it as auto)" << std::endl; + if(_config->FindI("Debug::pkgAutoRemove",false)) { + std::clog << "Resolve installed new pkg: " << I.Name() + << " (now marking it as auto)" << std::endl; + } Cache[I].Flags |= pkgCache::Flag::Auto; } } @@ -1333,7 +1336,7 @@ bool pkgMarkUsed(pkgDepCache &Cache) if(_config->FindI("Debug::pkgAutoRemove",false) == true) for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) if(!Cache[Pkg].Dirty() && Cache[Pkg].AutomaticRemove > 0) - std::cout << "has auto-remove information: " << Pkg.Name() + std::clog << "has auto-remove information: " << Pkg.Name() << " " << (int)Cache[Pkg].AutomaticRemove << std::endl; diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 54cfcb8bb..e30baa4b2 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -20,6 +20,8 @@ #include #include #include + +#include #include #include /*}}}*/ @@ -162,7 +164,8 @@ bool pkgDepCache::writeStateFile(OpProgress *prog) // check if we have new information if(PkgState[pkg->ID].Flags & pkgCache::Flag::Auto) { - std::cout << "pkg: " << pkg.Name() << " is auto-dep" << std::endl; + if(_config->FindI("Debug::pkgAutoRemove",false)) + std::clog << "pkg: " << pkg.Name() << " is auto-dep" << std::endl; PkgState[pkg->ID].AutomaticRemove = pkgCache::State::RemoveRequired; } @@ -172,7 +175,6 @@ bool pkgDepCache::writeStateFile(OpProgress *prog) << "\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; diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 3bafd42ba..0236d7e77 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1361,7 +1361,8 @@ bool DoUpdate(CommandLine &CmdL) /* Remove unused automatic packages */ bool DoAutomaticRemove(CacheFile &Cache) { - std::cout << "DoAutomaticRemove()" << std::endl; + if(_config->FindI("Debug::pkgAutoRemove",false)) + std::cout << "DoAutomaticRemove()" << std::endl; if (_config->FindB("APT::Get::Remove",true) == false) return _error->Error(_("We are not supposed to delete stuff, can't " @@ -1597,10 +1598,10 @@ bool DoInstall(CommandLine &CmdL) return _error->Error(_("Broken packages")); } - //if (_config->FindB("APT::Get::AutomaticRemove")) { + if (_config->FindB("APT::Get::AutomaticRemove")) { if (!DoAutomaticRemove(Cache)) return false; - //} + } /* Print out a list of packages that are going to be installed extra to what the user asked */ @@ -2522,7 +2523,7 @@ int main(int argc,const char *argv[]) {0,"remove","APT::Get::Remove",0}, {0,"only-source","APT::Get::Only-Source",0}, {0,"arch-only","APT::Get::Arch-Only",0}, - {0,"experimental-automatic-remove","APT::Get::AutomaticRemove",0}, + {0,"automatic-remove","APT::Get::AutomaticRemove",0}, {0,"allow-unauthenticated","APT::Get::AllowUnauthenticated",0}, {'c',"config-file",0,CommandLine::ConfigFile}, {'o',"option",0,CommandLine::ArbItem}, diff --git a/configure.in b/configure.in index a8c170d3f..fd3eac884 100644 --- a/configure.in +++ b/configure.in @@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib) AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in) dnl -- SET THIS TO THE RELEASE VERSION -- -AC_DEFINE_UNQUOTED(VERSION,"0.6.38") +AC_DEFINE_UNQUOTED(VERSION,"0.6.39") PACKAGE="apt" AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE") AC_SUBST(PACKAGE) diff --git a/doc/examples/configure-index b/doc/examples/configure-index index a09ea0c37..31bc13430 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -29,6 +29,7 @@ APT Get { Arch-Only "false"; + AutomaticRemove "false"; Download-Only "false"; Simulate "false"; Assume-Yes "false"; @@ -235,7 +236,8 @@ Debug pkgAcquire::Worker "false"; pkgDPkgPM "false"; pkgOrderList "false"; - + pkgAutoRemove "false"; // show information about automatic removes + pkgInitialize "false"; // This one will dump the configuration space NoLocking "false"; Acquire::Ftp "false"; // Show ftp command traffic -- cgit v1.2.3-70-g09d2 From 0a57c0f0e4d0bc3474ce4d2101f36a997891d30d Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 29 Jun 2005 06:11:36 +0000 Subject: * use mark-and-sweep from aptitude now as GC algorithm --- apt-pkg/algorithms.cc | 245 +++++++++++++++++++++++++++++++++----------------- apt-pkg/depcache.cc | 43 ++++----- apt-pkg/depcache.h | 16 ++-- apt-pkg/pkgcache.h | 1 - cmdline/apt-get.cc | 5 +- debian/changelog | 7 +- 6 files changed, 197 insertions(+), 120 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 5167d11eb..bed90f5d0 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -20,7 +20,10 @@ #include #include #include +#include +#include #include + #include @@ -1248,106 +1251,186 @@ void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List) /*}}}*/ -// pkgMarkPkgUsed - Mark used packages as dirty /*{{{*/ -// --------------------------------------------------------------------- -/* Mark all reachable packages as dirty. */ -void pkgMarkPkgUsed(pkgDepCache &Cache, pkgCache::PkgIterator Pkg, - pkgCache::State::PkgRemoveState DirtLevel) +// mark a single package in Mark-and-Sweep +void pkgMarkPackage(pkgDepCache &Cache, + const pkgCache::PkgIterator &pkg, + const pkgCache::VerIterator &ver, + bool follow_recommends, + bool follow_suggests) { - // If it is not installed, and we are in manual mode, ignore it - if ((Pkg->CurrentVer == 0 && Cache[Pkg].Install() == false || Cache[Pkg].Delete() == true) && - DirtLevel == pkgCache::State::RemoveManual) + pkgDepCache::StateCache &state=Cache[pkg]; + pkgCache::VerIterator candver=state.CandidateVerIter(Cache); + pkgCache::VerIterator instver=state.InstVerIter(Cache); + +#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=pkgDepCache::Unused) { -// fprintf(stdout,"This one is not installed/virtual %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); - return; + if(ver==candver) + mark_install(pkg, false, false, NULL); + else if(ver==pkg.CurrentVer()) + MarkKeep(pkg); + + instver=state.InstVerIter(*this); } +#endif - // If it is not installed, and it is not virtual, ignore it - if ((Pkg->CurrentVer == 0 && Cache[Pkg].Install() == false || Cache[Pkg].Delete() == true) && - Pkg->VersionList != 0) - { -// fprintf(stdout,"This one is not installed %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); + // 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 it is similar or more dirty than we are ;-), because we've been here already, don't mark it - // This is necessary because virtual packages just relay the current level, - // so it may be possible e.g. that this was already seen with ::RemoveSuggested, but - // we are ::RemoveRequired - if (Cache[Pkg].Dirty() >= DirtLevel) - { - //fprintf(stdout,"Seen already %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); + // if we are marked already we are done + if(state.Marked) return; - } - - // If it is less important than the current DirtLevel, don't mark it - if (Cache[Pkg].AutomaticRemove != pkgCache::State::RemoveManual && - Cache[Pkg].AutomaticRemove > DirtLevel) + + //std::cout << "Setting Marked for: " << pkg.Name() << std::endl; + state.Marked=true; + + if(!ver.end()) { -// fprintf(stdout,"We don't need %s %d %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel, Cache[Pkg].Dirty()); - return; + for(pkgCache::DepIterator d=ver.DependsList(); !d.end(); ++d) + { + if(d->Type==pkgCache::Dep::Depends || + d->Type==pkgCache::Dep::PreDepends || + (follow_recommends && + d->Type==pkgCache::Dep::Recommends) || + (follow_suggests && + d->Type==pkgCache::Dep::Suggests)) + { + // Try all versions of this package. + for(pkgCache::VerIterator V=d.TargetPkg().VersionList(); + !V.end(); ++V) + { + if(_system->VS->CheckDep(V.VerStr(),d->CompareOp, d.TargetVer())) + { + pkgMarkPackage(Cache, V.ParentPkg(), V, + follow_recommends, follow_suggests); + } + } + // Now try virtual packages + for(pkgCache::PrvIterator prv=d.TargetPkg().ProvidesList(); + !prv.end(); ++prv) + { + if(_system->VS->CheckDep(prv.ProvideVersion(), d->CompareOp, + d.TargetVer())) + { + pkgMarkPackage(Cache, prv.OwnerPkg(), prv.OwnerVer(), + follow_recommends, follow_suggests); + } + } + } + } } +} - // Mark it as used - Cache.SetDirty(Pkg, DirtLevel); - - //fprintf(stdout,"We keep %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); - // We are a virtual package - if (Pkg->VersionList == 0) +bool pkgMarkUsed(pkgDepCache &Cache) +{ + bool follow_recommends; + bool follow_suggests; + + // init the states + for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p) { -// fprintf(stdout,"We are virtual %s %d %d\n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); - for (pkgCache::PrvIterator Prv = Pkg.ProvidesList(); ! Prv.end(); ++Prv) - pkgMarkPkgUsed (Cache, Prv.OwnerPkg(), DirtLevel); - return; + Cache[p].Marked=false; + Cache[p].Garbage=false; } - // Depending on the type of dependency, follow it - for (pkgCache::DepIterator D = Cache[Pkg].InstVerIter(Cache).DependsList(); ! D.end(); ++D) - { -// fprintf(stdout,"We depend on %s %s\n", D.TargetPkg().Name(), D.DepType()); + // init vars + follow_recommends=_config->FindB("APT::AutoRemove::RecommendsImportant",false); + follow_suggests=_config->FindB("APT::AutoRemove::SuggestsImportend", false); - switch(D->Type) + + // do the mark part + for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p) + { + if(Cache[p].InstallReason==pkgDepCache::Manual || + (p->Flags & pkgCache::Flag::Essential)) { - case pkgCache::Dep::Depends: - case pkgCache::Dep::PreDepends: - pkgMarkPkgUsed (Cache, D.TargetPkg(), pkgCache::State::RemoveRequired); - break; - case pkgCache::Dep::Recommends: - pkgMarkPkgUsed (Cache, D.TargetPkg(), pkgCache::State::RemoveRecommended); - break; - case pkgCache::Dep::Suggests: - pkgMarkPkgUsed (Cache, D.TargetPkg(), pkgCache::State::RemoveSuggested); - break; - case pkgCache::Dep::Conflicts: - case pkgCache::Dep::Replaces: - case pkgCache::Dep::Obsoletes: - // We don't handle these here - break; + if(Cache[p].Keep() && !p.CurrentVer().end()) + pkgMarkPackage(Cache, p, p.CurrentVer(), + follow_recommends, follow_suggests); + else if(Cache[p].Install()) + pkgMarkPackage(Cache, p, Cache[p].InstVerIter(Cache), + follow_recommends, follow_suggests); } } -// fprintf(stdout,"We keep %s %d %d \n", Pkg.Name(), Pkg->AutomaticRemove, DirtLevel); -} - /*}}}*/ -bool pkgMarkUsed(pkgDepCache &Cache) -{ - // debug only - if(_config->FindI("Debug::pkgAutoRemove",false) == true) - for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) - if(!Cache[Pkg].Dirty() && Cache[Pkg].AutomaticRemove > 0) - std::clog << "has auto-remove information: " << Pkg.Name() - << " " << (int)Cache[Pkg].AutomaticRemove - << std::endl; - - // init with defaults - for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) - Cache.SetDirty(Pkg, pkgCache::State::RemoveUnknown); - - // go recursive over the cache - for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); ! Pkg.end(); ++Pkg) - pkgMarkPkgUsed (Cache, Pkg, pkgCache::State::RemoveManual); - + // do the sweep + for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p) + { + pkgDepCache::StateCache &state=Cache[p]; + + if(!state.Marked) + { + // mark installed but not yet marked stuff as garbage + if(p->CurrentVer != 0) { + state.Garbage=true; + std::cout << "Garbage: " << p.Name() << std::endl; + } + +#if 0 // mvo: the below bits still needs to be ported + + // Be sure not to re-delete already deleted packages. + if(delete_unused && (!p.CurrentVer().end() || state.Install()) && + !state.Delete()) + { + bool do_delete=true; + + // If the package is being upgraded, check if we're + // losing a versioned dep. If the dependency matches + // the previous version and not the new version, keep + // the package back instead of removing it. + if(!p.CurrentVer().end() && state.Install()) + { + const char *vs=p.CurrentVer().VerStr(); + + // Check direct revdeps only. THIS ASSUMES NO + // VERSIONED PROVIDES, but Debian probably won't + // have them for ages if ever. + for(pkgCache::DepIterator revdep=p.RevDependsList(); + !revdep.end(); ++revdep) + { + pkgCache::PkgIterator depender=revdep.ParentPkg(); + // Find which version of the depending package + // will be installed. + pkgCache::VerIterator instver=(*this)[depender].InstVerIter(*this); + + // Only pay attention to strong positive + // dependencies whose parents will be installed. + if(revdep.ParentVer()==instver && + (revdep->Type==pkgCache::Dep::Depends || + revdep->Type==pkgCache::Dep::PreDepends || + (revdep->Type==pkgCache::Dep::Recommends && + follow_recommends))) + { + // If the previous version matched, cancel the + // deletion. (note that I assume that the new + // version does NOT match; otherwise it would + // not be unused!) + if(_system->VS->CheckDep(vs, + revdep->CompareOp, + revdep.TargetVer())) + { + mark_keep(p, false, false, undo); + do_delete=false; + break; + } + } + } + } + + if(do_delete) + mark_delete(p, false, true, undo); + } +#endif + } + } return true; } diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index e30baa4b2..52b43d83d 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -78,9 +78,7 @@ bool pkgDepCache::Init(OpProgress *Prog) // Find the proper cache slot StateCache &State = PkgState[I->ID]; State.iFlags = 0; - State.DirtyState = pkgCache::State::RemoveUnknown; - //State.AutomaticRemove = I->AutomaticRemove; - State.AutomaticRemove = pkgCache::State::RemoveUnknown; + State.InstallReason = Manual; // Figure out the install version State.CandidateVer = GetCandidateVer(I); @@ -116,7 +114,7 @@ bool pkgDepCache::readStateFile(OpProgress *Prog) state_file.Open(state, FileFd::ReadOnly); int file_size = state_file.Size(); Prog->OverallProgress(0, file_size, 1, - _("Reading extended state information")); + _("Reading state information")); pkgTagFile tagfile(&state_file); pkgTagSection section; @@ -127,16 +125,17 @@ bool pkgDepCache::readStateFile(OpProgress *Prog) // 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; + short reason = section.FindI("Install-Reason",pkgDepCache::Manual); + PkgState[pkg->ID].InstallReason = (ChangedReason)reason; + if(_config->FindB("Debug::pkgAutoRemove",false)) + std::cout << "Install-Reason for: " << pkgname + << " is " << reason << std::endl; amt+=section.size(); Prog->OverallProgress(amt, file_size, 1, - _("Reading extended state information")); + _("Reading state information")); } Prog->OverallProgress(file_size, file_size, 1, - _("Reading extended state information")); + _("Reading state information")); } } @@ -145,9 +144,6 @@ bool pkgDepCache::readStateFile(OpProgress *Prog) bool pkgDepCache::writeStateFile(OpProgress *prog) { - // FIXME: this function needs to be called inside the commit() - // of the package manager. so after - FileFd StateFile; string state = _config->FindDir("Dir::State") + "pkgstates"; @@ -160,20 +156,20 @@ bool pkgDepCache::writeStateFile(OpProgress *prog) // clear out no longer installed pkg if(PkgState[pkg->ID].Delete() || pkg.CurrentVer() == NULL) - PkgState[pkg->ID].AutomaticRemove = pkgCache::State::RemoveUnknown; + PkgState[pkg->ID].InstallReason = Manual; // check if we have new information if(PkgState[pkg->ID].Flags & pkgCache::Flag::Auto) { if(_config->FindI("Debug::pkgAutoRemove",false)) std::clog << "pkg: " << pkg.Name() << " is auto-dep" << std::endl; - PkgState[pkg->ID].AutomaticRemove = pkgCache::State::RemoveRequired; + PkgState[pkg->ID].InstallReason = Libapt; } - if(PkgState[pkg->ID].AutomaticRemove != pkgCache::State::RemoveUnknown) { + if(PkgState[pkg->ID].InstallReason != Manual) { ostr.str(string("")); - ostr << "Package: " << pkg.Name() - << "\nRemove-Reason: " - << (int)(PkgState[pkg->ID].AutomaticRemove) << "\n\n"; + ostr << "Package: " << pkg.Name() + << "\nInstall-Reason: " + << (int)(PkgState[pkg->ID].InstallReason) << "\n\n"; StateFile.Write(ostr.str().c_str(), ostr.str().size()); } } @@ -841,15 +837,6 @@ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To) AddSizes(Pkg); } /*}}}*/ -// DepCache::SetDirty - Switch the package between dirty states /*{{{*/ -// --------------------------------------------------------------------- -/* */ -void pkgDepCache::SetDirty(PkgIterator const &Pkg, pkgCache::State::PkgRemoveState To) -{ - StateCache &P = PkgState[Pkg->ID]; - P.DirtyState = To; -} - /*}}}*/ // DepCache::SetCandidateVersion - Change the candidate version /*{{{*/ // --------------------------------------------------------------------- /* */ diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index e02ed72f0..c91e09ab3 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -63,6 +63,10 @@ class pkgDepCache : protected pkgCache::Namespace enum VersionTypes {NowVersion, InstallVersion, CandidateVersion}; enum ModeList {ModeDelete = 0, ModeKeep = 1, ModeInstall = 2}; + + // Flags for the GC + enum ChangedReason {Manual, UserAuto, Libapt, FromResolver, PkgIsUnused}; + struct StateCache { // Epoch stripped text versions of the two version fields @@ -79,9 +83,13 @@ class pkgDepCache : protected pkgCache::Namespace unsigned short Flags; unsigned short iFlags; // Internal flags - // Traversal status and state for automatic removal - unsigned char DirtyState; - unsigned char AutomaticRemove; + // mark and sweep flags + ChangedReason InstallReason; +#if 0 + ChangedReason RemoveReason; +#endif + bool Marked; + bool Garbage; // Various tree indicators signed char Status; // -1,0,1,2 @@ -103,7 +111,6 @@ class pkgDepCache : protected pkgCache::Namespace inline bool NowBroken() const {return (DepState & DepNowMin) != DepNowMin;}; inline bool InstBroken() const {return (DepState & DepInstMin) != DepInstMin;}; inline bool Install() const {return Mode == ModeInstall;}; - inline unsigned char Dirty() const {return DirtyState;}; inline VerIterator InstVerIter(pkgCache &Cache) {return VerIterator(Cache,InstallVer);}; inline VerIterator CandidateVerIter(pkgCache &Cache) @@ -194,7 +201,6 @@ class pkgDepCache : protected pkgCache::Namespace unsigned long Depth = 0); void SetReInstall(PkgIterator const &Pkg,bool To); void SetCandidateVersion(VerIterator TargetVer); - void SetDirty(PkgIterator const &Pkg, pkgCache::State::PkgRemoveState To); // This is for debuging void Update(OpProgress *Prog = 0); diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index 083f20ac2..b07951dfb 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -75,7 +75,6 @@ class pkgCache enum PkgInstState {Ok=0,ReInstReq=1,HoldInst=2,HoldReInstReq=3}; enum PkgCurrentState {NotInstalled=0,UnPacked=1,HalfConfigured=2, HalfInstalled=4,ConfigFiles=5,Installed=6}; - enum PkgRemoveState {RemoveUnknown=0, RemoveManual=1,RemoveSuggested=2,RemoveRecommended=3,RemoveRequired=4}; }; struct Flag diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 0236d7e77..9d97f8756 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1374,12 +1374,11 @@ bool DoAutomaticRemove(CacheFile &Cache) // look over the cache to see what can be removed for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) { - if (! Cache[Pkg].Dirty() && + if (Cache[Pkg].Garbage && (Pkg->CurrentVer != 0 && Cache[Pkg].Install() == false && Cache[Pkg].Delete() == false)) { - fprintf(stdout,"We could delete %s %d\n", - Pkg.Name(), Cache[Pkg].AutomaticRemove); + fprintf(stdout,"We could delete %s\n", Pkg.Name()); Cache->MarkDelete(Pkg,_config->FindB("APT::Get::Purge",false)); } } diff --git a/debian/changelog b/debian/changelog index 78559fd56..11e1a6282 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,8 +14,11 @@ apt (0.6.38ubuntu1mvo1) unstable; urgency=low 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 - - -- Michael Vogt Tue, 28 Jun 2005 11:18:24 +0200 + - started to port the great automatic dependency mangement code from + aptitude over to apt (thanks dburrows for answering my silly + questions and your great help!) + + -- apt (0.6.38ubuntu1) breezy; urgency=low -- cgit v1.2.3-70-g09d2 From 2ac6ce927cda2847baf8e71a74e595e6b82c6d98 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 30 Jun 2005 08:02:37 +0000 Subject: * added a callback to pkgMarkUsed() so that frontend can extend the root-set of the auto-remover easily --- apt-pkg/algorithms.cc | 10 ++++++---- apt-pkg/algorithms.h | 18 +++++++++++++++--- 2 files changed, 21 insertions(+), 7 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index c679e76f6..11f5b5671 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1329,7 +1329,7 @@ void pkgMarkPackage(pkgDepCache &Cache, } -bool pkgMarkUsed(pkgDepCache &Cache) +bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func) { bool follow_recommends; bool follow_suggests; @@ -1343,14 +1343,16 @@ bool pkgMarkUsed(pkgDepCache &Cache) // init vars follow_recommends=_config->FindB("APT::AutoRemove::RecommendsImportant",false); - follow_suggests=_config->FindB("APT::AutoRemove::SuggestsImportend", false); + follow_suggests=_config->FindB("APT::AutoRemove::SuggestsImportant", false); // do the mark part for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p) { - if(!(Cache[p].Flags & pkgCache::Flag::Auto) || - (p->Flags & pkgCache::Flag::Essential)) + if( (func != NULL ? (*func)(p) : false) || + !(Cache[p].Flags & pkgCache::Flag::Auto) || + (p->Flags & pkgCache::Flag::Essential)) + { if(Cache[p].Keep() && !p.CurrentVer().end()) pkgMarkPackage(Cache, p, p.CurrentVer(), diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index 210127ab9..82d7b7aad 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -133,8 +133,20 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache); void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List); -// mark all reachable packages, everything that is not reach can -// be removed -bool pkgMarkUsed(pkgDepCache &Cache); + +// callback function that can be used by the client to bring in +// certain own packages into the root set +typedef bool (*InRootSetFunc)(pkgCache::PkgIterator); + +// Mark all reachable packages with pkgDepCache::StateCache.Marked +// the root-set are all essential packages+everything that was installed +// manually +// +// If InRootSetFunc is set, it will be called for each PkgIterator. This +// is usefull for clients that have there own idea about the root-set +// +// Everything that is not reach can be removed +bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc f=NULL); + #endif -- cgit v1.2.3-70-g09d2 From 22dcc318d978813b3c4d1ae1a1f41933d0e1d69b Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 30 Jun 2005 08:53:45 +0000 Subject: * added APT::NeverAutoRemove (a list of regexp for package names that should never be automatically removed) --- apt-pkg/algorithms.cc | 49 +++++++++++++++++++++++++++++++++++++++++++- doc/examples/configure-index | 5 ++++- 2 files changed, 52 insertions(+), 2 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 11f5b5671..8e55649ca 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -26,7 +26,8 @@ #include - +#include +#include #include /*}}}*/ using namespace std; @@ -1329,6 +1330,19 @@ void pkgMarkPackage(pkgDepCache &Cache, } +// Helper for APT::NeverAutoRemove, always include the packages matching +// this regexp into the root-set +inline bool +pkgMarkAlwaysInclude(pkgCache::PkgIterator p, vector alwaysMark) +{ + for(unsigned int i=0;iFindB("APT::AutoRemove::SuggestsImportant", false); + // init the "NeverAutoRemove" variable + vector neverAutoRemoveRegexp; + 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); + for(unsigned int i=0;iError("Regex compilation error for APT::NeverAutoRemove"); + } + neverAutoRemoveRegexp.push_back(p); + } + } + + // do the mark part for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p) { if( (func != NULL ? (*func)(p) : false) || + pkgMarkAlwaysInclude(p, neverAutoRemoveRegexp) || !(Cache[p].Flags & pkgCache::Flag::Auto) || (p->Flags & pkgCache::Flag::Essential)) @@ -1434,5 +1475,11 @@ bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func) #endif } } + + // cleanup + for(unsigned int i=0;i Date: Thu, 30 Jun 2005 10:47:22 +0000 Subject: * some WS fixes --- apt-pkg/algorithms.cc | 6 ++++-- apt-pkg/algorithms.h | 9 +++++---- 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 8e55649ca..8626d33dc 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1386,18 +1386,20 @@ bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func) } - // do the mark part + // do the mark part, this is the core bit of the algorithm for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p) { if( (func != NULL ? (*func)(p) : false) || - pkgMarkAlwaysInclude(p, neverAutoRemoveRegexp) || + pkgMarkAlwaysInclude(p, neverAutoRemoveRegexp) || !(Cache[p].Flags & pkgCache::Flag::Auto) || (p->Flags & pkgCache::Flag::Essential)) { + // the package is installed (and set to keep) if(Cache[p].Keep() && !p.CurrentVer().end()) pkgMarkPackage(Cache, p, p.CurrentVer(), follow_recommends, follow_suggests); + // the package is to be installed else if(Cache[p].Install()) pkgMarkPackage(Cache, p, Cache[p].InstVerIter(Cache), follow_recommends, follow_suggests); diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index 82d7b7aad..02b40e15f 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -135,12 +135,13 @@ void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List); // callback function that can be used by the client to bring in -// certain own packages into the root set +// certain own packages into the root set (if the client returns +// True the package will be considered as part of the root set) typedef bool (*InRootSetFunc)(pkgCache::PkgIterator); -// Mark all reachable packages with pkgDepCache::StateCache.Marked -// the root-set are all essential packages+everything that was installed -// manually +// Mark all reachable packages with "pkgDepCache::StateCache.Marked=1" +// the root-set are all essential packages+everything that was not +// installed automatically // // If InRootSetFunc is set, it will be called for each PkgIterator. This // is usefull for clients that have there own idea about the root-set -- cgit v1.2.3-70-g09d2 From f8ac1720a94468d1384e88a57729e6d9801b56fd Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 30 Jun 2005 13:34:32 +0000 Subject: * slighly more debug output, renamed "--automatic-remove" to "--auto-remove" --- apt-pkg/algorithms.cc | 16 ++++++++++------ apt-pkg/depcache.cc | 4 ++-- cmdline/apt-get.cc | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 8626d33dc..3978e7561 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1353,6 +1353,11 @@ bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func) { Cache[p].Marked=false; Cache[p].Garbage=false; + + // debug output + if(_config->FindB("Debug::pkgAutoRemove",false) + && Cache[p].Flags & pkgCache::Flag::Auto) + std::clog << "AutoDep: " << p.Name() << std::endl; } // init vars @@ -1412,14 +1417,13 @@ bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func) { pkgDepCache::StateCache &state=Cache[p]; - if(!state.Marked) + // if it is not marked and it is installed, it's garbage + if(!state.Marked && !p.CurrentVer().end()) { - // mark installed but not yet marked stuff as garbage - if(p->CurrentVer != 0) { - state.Garbage=true; + state.Garbage=true; + if(_config->FindB("Debug::pkgAutoRemove",false)) std::cout << "Garbage: " << p.Name() << std::endl; - } - + #if 0 // mvo: the below bits still needs to be ported // Be sure not to re-delete already deleted packages. diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 81c79d812..9adc4e390 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -127,7 +127,7 @@ bool pkgDepCache::readStateFile(OpProgress *Prog) if(!pkg.end() && !pkg.VersionList().end()) { short reason = section.FindI("Auto-Installed", 0); if(reason > 0) - PkgState[pkg->ID].Flags |= pkgCache::Flag::Auto; + PkgState[pkg->ID].Flags |= Flag::Auto; if(_config->FindB("Debug::pkgAutoRemove",false)) std::cout << "Auto-Installed : " << pkgname << std::endl; amt+=section.size(); @@ -159,7 +159,7 @@ bool pkgDepCache::writeStateFile(OpProgress *prog) std::ostringstream ostr; for(pkgCache::PkgIterator pkg=Cache->PkgBegin(); !pkg.end();pkg++) { - if(PkgState[pkg->ID].Flags & pkgCache::Flag::Auto) { + if(PkgState[pkg->ID].Flags & Flag::Auto) { if(_config->FindB("Debug::pkgAutoRemove",false)) std::clog << "AutoInstal: " << pkg.Name() << std::endl; ostr.str(string("")); diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 9d97f8756..cb8fc7724 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2522,7 +2522,7 @@ int main(int argc,const char *argv[]) {0,"remove","APT::Get::Remove",0}, {0,"only-source","APT::Get::Only-Source",0}, {0,"arch-only","APT::Get::Arch-Only",0}, - {0,"automatic-remove","APT::Get::AutomaticRemove",0}, + {0,"auto-remove","APT::Get::AutomaticRemove",0}, {0,"allow-unauthenticated","APT::Get::AllowUnauthenticated",0}, {'c',"config-file",0,CommandLine::ConfigFile}, {'o',"option",0,CommandLine::ArbItem}, -- cgit v1.2.3-70-g09d2 From 331956f9b59c8c30cce977e8729991559d46005c Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 19 Aug 2005 08:50:57 +0000 Subject: * added a InRootSetFunc class for clients to add own packages to the mark'n'sweep root set --- apt-pkg/algorithms.cc | 10 ++++++++-- apt-pkg/algorithms.h | 14 ++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 3978e7561..82ea19c93 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -1342,8 +1342,14 @@ pkgMarkAlwaysInclude(pkgCache::PkgIterator p, vector alwaysMark) return false; } +bool pkgMarkUsed(pkgDepCache &Cache) +{ + InRootSetFunc f; + return pkgMarkUsed(Cache, f); +} + // the main mark algorithm -bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func) +bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc &userFunc) { bool follow_recommends; bool follow_suggests; @@ -1394,7 +1400,7 @@ bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func) // do the mark part, this is the core bit of the algorithm for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p) { - if( (func != NULL ? (*func)(p) : false) || + if( userFunc.InRootSet(p) || pkgMarkAlwaysInclude(p, neverAutoRemoveRegexp) || !(Cache[p].Flags & pkgCache::Flag::Auto) || (p->Flags & pkgCache::Flag::Essential)) diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index 02b40e15f..e539a410e 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -134,10 +134,16 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache); void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List); -// callback function that can be used by the client to bring in +// class that can be subclassed by the client to bring in // certain own packages into the root set (if the client returns // True the package will be considered as part of the root set) -typedef bool (*InRootSetFunc)(pkgCache::PkgIterator); +class InRootSetFunc +{ + public: + virtual bool InRootSet(const pkgCache::PkgIterator &pkg) {return false;}; + virtual ~InRootSetFunc() {}; +}; + // Mark all reachable packages with "pkgDepCache::StateCache.Marked=1" // the root-set are all essential packages+everything that was not @@ -147,7 +153,7 @@ typedef bool (*InRootSetFunc)(pkgCache::PkgIterator); // is usefull for clients that have there own idea about the root-set // // Everything that is not reach can be removed -bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc f=NULL); - +bool pkgMarkUsed(pkgDepCache &Cache); +bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc &f); #endif -- cgit v1.2.3-70-g09d2 From 74a05226eff7041cd8f2380fe599862d350a1ac3 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 9 Nov 2005 11:39:27 +0000 Subject: * merged daniel burrows fixes for the auto-mark code Patches applied: * dburrows@debian.org--2005/apt--auto-mark--0--base-0 tag of michael.vogt@ubuntu.com--2005/apt--auto-mark--0--patch-22 * dburrows@debian.org--2005/apt--auto-mark--0--patch-1 doxygenize the new automark stuff * dburrows@debian.org--2005/apt--auto-mark--0--patch-2 Automatically update package markings after every state-changing public operation, and allow users of the dep-cache to group actions into a single action. * dburrows@debian.org--2005/apt--auto-mark--0--patch-3 Automatically update package markings after every state-changing public operation, and allow users of the dep-cache to group actions into a single action. * dburrows@debian.org--2005/apt--auto-mark--0--patch-4 Make action groups noncopyable * dburrows@debian.org--2005/apt--auto-mark--0--patch-5 Typo fix * dburrows@debian.org--2005/apt--auto-mark--0--patch-6 Add a FromUser flag to MarkKeep. * dburrows@debian.org--2005/apt--auto-mark--0--patch-7 Somehow the ActionGroup definition got duplicated; kill the duplicate. * dburrows@debian.org--2005/apt--auto-mark--0--patch-8 Cancel the automatic flag on packages that are being kept only if they are garbage. * dburrows@debian.org--2005/apt--auto-mark--0--patch-9 Don't clear the 'automatically installed' flag in MarkDelete. * dburrows@debian.org--2005/apt--auto-mark--0--patch-10 Add a FromUser flag to MarkInstall, and fix its handling of the Auto flag. * dburrows@debian.org--2005/apt--auto-mark--0--patch-11 Only clear the Auto flag on manual changes in MarkKeep. * dburrows@debian.org--2005/apt--auto-mark--0--patch-12 Make changes from the internal algorithms automatic. * dburrows@debian.org--2005/apt--auto-mark--0--patch-13 Use ActionGroups in algorithms that make lots of changes, and fix a compile error. * dburrows@debian.org--2005/apt--auto-mark--0--patch-14 Split the sweep code into a separate routine from pkgMarkUsed * dburrows@debian.org--2005/apt--auto-mark--0--patch-15 Update another call of MarkKeep to indicate that it's automatic. * dburrows@debian.org--2005/apt--auto-mark--0--patch-16 Move the mark-and-sweep code into pkgDepCache; call Sweep and document what it and Garbage are for; add a hook that can be used to generate a custom root-set function; move the big blob of regexp stuff into the custom root-set; fix the memory leak in the regexp stuff. * dburrows@debian.org--2005/apt--auto-mark--0--patch-17 Make ActionGroup take a reference instead of a pointer to the cache. * dburrows@debian.org--2005/apt--auto-mark--0--patch-18 Don't mark already-to-be-deleted packages as garbage, to imitate aptitude's behavior. * dburrows@debian.org--2005/apt--auto-mark--0--patch-19 Update apt-get for the new auto-mark protocol. * dburrows@debian.org--2005/apt--auto-mark--0--patch-20 Add a setter method for the Auto flag. * dburrows@debian.org--2005/apt--auto-mark--0--patch-21 Fix the test in apt-get about what to delete. * dburrows@debian.org--2005/apt--auto-mark--0--patch-22 Add a zero-argument mark-and-sweep routine and use it to do a mark-and-sweep on startup (so the garbage flags are initialized properly). * dburrows@debian.org--2005/apt--auto-mark--0--patch-23 Right, Status is 2 for new installs, not 0. * dburrows@debian.org--2005/apt--auto-mark--0--patch-24 POT updates. * dburrows@debian.org--2005/apt--auto-mark--0--patch-25 Actually initialize group_level to 0. * dburrows@debian.org--2005/apt--auto-mark--0--patch-26 Don't make an ActionGroup in Sweep, since there's no point and it also is an infinite loop. * dburrows@debian.org--2005/apt--auto-mark--0--patch-27 Add virtual hooks to control whether the garbage collector considers recommends and/or suggests to be strong links. * dburrows@debian.org--2005/apt--auto-mark--0--patch-28 Call the progress methods in the right order so we don't generate nonsensical progress notifications. * dburrows@debian.org--2005/apt--auto-mark--0--patch-29 Typo fix. * dburrows@debian.org--2005/apt--auto-mark--0--patch-30 Make RecommendsImportant default to true in apt, too. * dburrows@debian.org--2005/apt--auto-mark--0--patch-31 Add a release() method to action groups. * dburrows@debian.org--2005/apt--auto-mark--0--patch-32 Add an 'autoremove' command that is synonymous to '--auto-remove remove'. --- apt-pkg/algorithms.cc | 318 ++++--------------------- apt-pkg/algorithms.h | 23 -- apt-pkg/depcache.cc | 322 ++++++++++++++++++++++++-- apt-pkg/depcache.h | 212 ++++++++++++++++- apt-pkg/packagemanager.cc | 2 +- cmdline/apt-get.cc | 35 ++- po/apt-all.pot | 576 ++++++++++++++++++++++++++++------------------ 7 files changed, 931 insertions(+), 557 deletions(-) (limited to 'apt-pkg/algorithms.cc') diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 82ea19c93..ac9d3be0b 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -20,14 +20,12 @@ #include #include #include -#include #include #include #include #include -#include #include /*}}}*/ using namespace std; @@ -224,6 +222,8 @@ void pkgSimulate::ShortBreaks() the necessary calculations to deal with the problems. */ bool pkgApplyStatus(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) { if (I->VersionList == 0) @@ -234,13 +234,13 @@ bool pkgApplyStatus(pkgDepCache &Cache) I->InstState == pkgCache::State::HoldReInstReq) { if (I->CurrentVer != 0 && I.CurrentVer().Downloadable() == true) - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); else { // Is this right? Will dpkg choke on an upgrade? if (Cache[I].CandidateVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable() == true) - Cache.MarkInstall(I); + Cache.MarkInstall(I, false, 0, false); else return _error->Error(_("The package %s needs to be reinstalled, " "but I can't find an archive for it."),I.Name()); @@ -257,12 +257,12 @@ bool pkgApplyStatus(pkgDepCache &Cache) case pkgCache::State::HalfConfigured: if ((I->CurrentVer != 0 && I.CurrentVer().Downloadable() == true) || I.State() != pkgCache::PkgIterator::NeedsUnpack) - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); else { if (Cache[I].CandidateVer != 0 && Cache[I].CandidateVerIter(Cache).Downloadable() == true) - Cache.MarkInstall(I); + Cache.MarkInstall(I, true, 0, false); else Cache.MarkDelete(I); } @@ -288,10 +288,12 @@ bool pkgApplyStatus(pkgDepCache &Cache) on the result. */ bool pkgFixBroken(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + // Auto upgrade all broken packages for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) if (Cache[I].NowBroken() == true) - Cache.MarkInstall(I,true); + Cache.MarkInstall(I, true, 0, false); /* Fix packages that are in a NeedArchive state but don't have a downloadable install version */ @@ -304,7 +306,7 @@ bool pkgFixBroken(pkgDepCache &Cache) if (Cache[I].InstVerIter(Cache).Downloadable() == false) continue; - Cache.MarkInstall(I,true); + Cache.MarkInstall(I, true, 0, false); } pkgProblemResolver Fix(&Cache); @@ -321,23 +323,25 @@ bool pkgFixBroken(pkgDepCache &Cache) */ bool pkgDistUpgrade(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + /* Auto upgrade all installed packages, this provides the basis for the installation */ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) if (I->CurrentVer != 0) - Cache.MarkInstall(I,true); + Cache.MarkInstall(I, true, 0, false); /* Now, auto upgrade all essential packages - this ensures that the essential packages are present and working */ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential) - Cache.MarkInstall(I,true); + Cache.MarkInstall(I, true, 0, false); /* We do it again over all previously installed packages to force conflict resolution on them all. */ for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) if (I->CurrentVer != 0) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); pkgProblemResolver Fix(&Cache); @@ -349,7 +353,7 @@ bool pkgDistUpgrade(pkgDepCache &Cache) if (I->SelectedState == pkgCache::State::Hold) { Fix.Protect(I); - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); } } } @@ -364,6 +368,8 @@ bool pkgDistUpgrade(pkgDepCache &Cache) to install packages not marked for install */ bool pkgAllUpgrade(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + pkgProblemResolver Fix(&Cache); if (Cache.BrokenCount() != 0) @@ -380,7 +386,7 @@ bool pkgAllUpgrade(pkgDepCache &Cache) continue; if (I->CurrentVer != 0 && Cache[I].InstallVer != 0) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); } return Fix.ResolveByKeep(); @@ -393,6 +399,8 @@ bool pkgAllUpgrade(pkgDepCache &Cache) the package is restored. */ bool pkgMinimizeUpgrade(pkgDepCache &Cache) { + pkgDepCache::ActionGroup group(Cache); + if (Cache.BrokenCount() != 0) return false; @@ -409,9 +417,9 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache) continue; // Keep it and see if that is OK - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); if (Cache.BrokenCount() != 0) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); else { // If keep didnt actually do anything then there was no change.. @@ -569,6 +577,8 @@ void pkgProblemResolver::MakeScores() installable */ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) { + pkgDepCache::ActionGroup group(Cache); + if ((Flags[Pkg->ID] & Upgradable) == 0 || Cache[Pkg].Upgradable() == false) return false; if ((Flags[Pkg->ID] & Protected) == Protected) @@ -577,7 +587,7 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) Flags[Pkg->ID] &= ~Upgradable; bool WasKept = Cache[Pkg].Keep(); - Cache.MarkInstall(Pkg,false); + Cache.MarkInstall(Pkg, false, 0, false); // This must be a virtual package or something like that. if (Cache[Pkg].InstVerIter(Cache).end() == true) @@ -662,7 +672,7 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) if (Fail == true) { if (WasKept == true) - Cache.MarkKeep(Pkg); + Cache.MarkKeep(Pkg, false, false); else Cache.MarkDelete(Pkg); return false; @@ -689,6 +699,8 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) upgrade packages to advoid problems. */ bool pkgProblemResolver::Resolve(bool BrokenFix) { + pkgDepCache::ActionGroup group(Cache); + unsigned long Size = Cache.Head().PackageCount; // Record which packages are marked for install @@ -704,7 +716,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) { if (Cache[I].InstBroken() == true && BrokenFix == true) { - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); if (Cache[I].Install() == true) Again = true; } @@ -770,14 +782,14 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) pkgCache::Version *OldVer = Cache[I].InstallVer; Flags[I->ID] &= ReInstateTried; - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); if (Cache[I].InstBroken() == true || OldBreaks < Cache.BrokenCount()) { if (OldVer == 0) Cache.MarkDelete(I); else - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); } else if (Debug == true) @@ -822,7 +834,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) { if (Debug == true) clog << " Or group keep for " << I.Name() << endl; - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); Change = true; } } @@ -872,7 +884,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) } Change = true; - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); break; } @@ -909,7 +921,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) /* See if a keep will do, unless the package is protected, then installing it will be necessary */ bool Installed = Cache[I].Install(); - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); if (Cache[I].InstBroken() == false) { // Unwind operation will be keep now @@ -918,7 +930,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) // Restore if (InOr == true && Installed == true) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); if (Debug == true) clog << " Holding Back " << I.Name() << " rather than change " << Start.TargetPkg().Name() << endl; @@ -990,7 +1002,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) // Restore if (InOr == true && Installed == true) - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); if (Debug == true) clog << " Holding Back " << I.Name() << " because I can't find " << Start.TargetPkg().Name() << endl; @@ -1035,7 +1047,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) { if (Debug == true) clog << " Fixing " << I.Name() << " via keep of " << J->Pkg.Name() << endl; - Cache.MarkKeep(J->Pkg); + Cache.MarkKeep(J->Pkg, false, false); } if (Counter > 1) @@ -1089,6 +1101,8 @@ bool pkgProblemResolver::Resolve(bool BrokenFix) system was non-broken previously. */ bool pkgProblemResolver::ResolveByKeep() { + pkgDepCache::ActionGroup group(Cache); + unsigned long Size = Cache.Head().PackageCount; if (Debug == true) @@ -1122,7 +1136,7 @@ bool pkgProblemResolver::ResolveByKeep() { if (Debug == true) clog << "Keeping package " << I.Name() << endl; - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); if (Cache[I].InstBroken() == false) { K = PList - 1; @@ -1170,7 +1184,7 @@ bool pkgProblemResolver::ResolveByKeep() { if (Debug == true) clog << " Keeping Package " << Pkg.Name() << " due to dep" << endl; - Cache.MarkKeep(Pkg); + Cache.MarkKeep(Pkg, false, false); } if (Cache[I].InstBroken() == false) @@ -1207,6 +1221,8 @@ bool pkgProblemResolver::ResolveByKeep() /* This is used to make sure protected packages are installed */ void pkgProblemResolver::InstallProtect() { + pkgDepCache::ActionGroup group(Cache); + for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) { if ((Flags[I->ID] & Protected) == Protected) @@ -1214,7 +1230,7 @@ void pkgProblemResolver::InstallProtect() if ((Flags[I->ID] & ToRemove) == ToRemove) Cache.MarkDelete(I); else - Cache.MarkInstall(I,false); + Cache.MarkInstall(I, false, 0, false); } } } @@ -1251,247 +1267,3 @@ void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List) } /*}}}*/ - -// mark a single package in Mark-and-Sweep -void pkgMarkPackage(pkgDepCache &Cache, - const pkgCache::PkgIterator &pkg, - const pkgCache::VerIterator &ver, - bool follow_recommends, - bool follow_suggests) -{ - pkgDepCache::StateCache &state=Cache[pkg]; - pkgCache::VerIterator candver=state.CandidateVerIter(Cache); - pkgCache::VerIterator instver=state.InstVerIter(Cache); - -#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=pkgDepCache::Unused) - { - if(ver==candver) - mark_install(pkg, false, false, NULL); - else if(ver==pkg.CurrentVer()) - MarkKeep(pkg); - - 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(pkgCache::DepIterator d=ver.DependsList(); !d.end(); ++d) - { - if(d->Type==pkgCache::Dep::Depends || - d->Type==pkgCache::Dep::PreDepends || - (follow_recommends && - d->Type==pkgCache::Dep::Recommends) || - (follow_suggests && - d->Type==pkgCache::Dep::Suggests)) - { - // Try all versions of this package. - for(pkgCache::VerIterator V=d.TargetPkg().VersionList(); - !V.end(); ++V) - { - if(_system->VS->CheckDep(V.VerStr(),d->CompareOp, d.TargetVer())) - { - pkgMarkPackage(Cache, V.ParentPkg(), V, - follow_recommends, follow_suggests); - } - } - // Now try virtual packages - for(pkgCache::PrvIterator prv=d.TargetPkg().ProvidesList(); - !prv.end(); ++prv) - { - if(_system->VS->CheckDep(prv.ProvideVersion(), d->CompareOp, - d.TargetVer())) - { - pkgMarkPackage(Cache, prv.OwnerPkg(), prv.OwnerVer(), - follow_recommends, follow_suggests); - } - } - } - } - } -} - - -// Helper for APT::NeverAutoRemove, always include the packages matching -// this regexp into the root-set -inline bool -pkgMarkAlwaysInclude(pkgCache::PkgIterator p, vector alwaysMark) -{ - for(unsigned int i=0;iFindB("Debug::pkgAutoRemove",false) - && Cache[p].Flags & pkgCache::Flag::Auto) - std::clog << "AutoDep: " << p.Name() << std::endl; - } - - // init vars - follow_recommends=_config->FindB("APT::AutoRemove::RecommendsImportant",false); - follow_suggests=_config->FindB("APT::AutoRemove::SuggestsImportant", false); - - - // init the "NeverAutoRemove" variable - vector neverAutoRemoveRegexp; - 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); - for(unsigned int i=0;iError("Regex compilation error for APT::NeverAutoRemove"); - } - neverAutoRemoveRegexp.push_back(p); - } - } - - - // do the mark part, this is the core bit of the algorithm - for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p) - { - if( userFunc.InRootSet(p) || - pkgMarkAlwaysInclude(p, neverAutoRemoveRegexp) || - !(Cache[p].Flags & pkgCache::Flag::Auto) || - (p->Flags & pkgCache::Flag::Essential)) - - { - // the package is installed (and set to keep) - if(Cache[p].Keep() && !p.CurrentVer().end()) - pkgMarkPackage(Cache, p, p.CurrentVer(), - follow_recommends, follow_suggests); - // the package is to be installed - else if(Cache[p].Install()) - pkgMarkPackage(Cache, p, Cache[p].InstVerIter(Cache), - follow_recommends, follow_suggests); - } - } - - - // do the sweep - for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p) - { - pkgDepCache::StateCache &state=Cache[p]; - - // if it is not marked and it is installed, it's garbage - if(!state.Marked && !p.CurrentVer().end()) - { - state.Garbage=true; - if(_config->FindB("Debug::pkgAutoRemove",false)) - std::cout << "Garbage: " << p.Name() << std::endl; - -#if 0 // mvo: the below bits still needs to be ported - - // Be sure not to re-delete already deleted packages. - if(delete_unused && (!p.CurrentVer().end() || state.Install()) && - !state.Delete()) - { - bool do_delete=true; - - // If the package is being upgraded, check if we're - // losing a versioned dep. If the dependency matches - // the previous version and not the new version, keep - // the package back instead of removing it. - if(!p.CurrentVer().end() && state.Install()) - { - const char *vs=p.CurrentVer().VerStr(); - - // Check direct revdeps only. THIS ASSUMES NO - // VERSIONED PROVIDES, but Debian probably won't - // have them for ages if ever. - for(pkgCache::DepIterator revdep=p.RevDependsList(); - !revdep.end(); ++revdep) - { - pkgCache::PkgIterator depender=revdep.ParentPkg(); - // Find which version of the depending package - // will be installed. - pkgCache::VerIterator instver=(*this)[depender].InstVerIter(*this); - - // Only pay attention to strong positive - // dependencies whose parents will be installed. - if(revdep.ParentVer()==instver && - (revdep->Type==pkgCache::Dep::Depends || - revdep->Type==pkgCache::Dep::PreDepends || - (revdep->Type==pkgCache::Dep::Recommends && - follow_recommends))) - { - // If the previous version matched, cancel the - // deletion. (note that I assume that the new - // version does NOT match; otherwise it would - // not be unused!) - if(_system->VS->CheckDep(vs, - revdep->CompareOp, - revdep.TargetVer())) - { - mark_keep(p, false, false, undo); - do_delete=false; - break; - } - } - } - } - - if(do_delete) - mark_delete(p, false, true, undo); - } -#endif - } - } - - // cleanup - for(unsigned int i=0;i #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; @@ -53,6 +82,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]; @@ -100,7 +133,7 @@ bool pkgDepCache::Init(OpProgress *Prog) if(Prog != 0) Prog->Done(); - + return true; } /*}}}*/ @@ -161,7 +194,7 @@ bool pkgDepCache::writeStateFile(OpProgress *prog) if(PkgState[pkg->ID].Flags & Flag::Auto) { if(_config->FindB("Debug::pkgAutoRemove",false)) - std::clog << "AutoInstal: " << pkg.Name() << std::endl; + std::clog << "AutoInstall: " << pkg.Name() << std::endl; ostr.str(string("")); ostr << "Package: " << pkg.Name() << "\nAuto-Installed: 1\n\n"; @@ -522,16 +555,16 @@ void pkgDepCache::Update(OpProgress *Prog) AddStates(I); } - readStateFile(Prog); - 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 @@ -583,7 +616,7 @@ void pkgDepCache::Update(PkgIterator const &Pkg) // 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) @@ -595,6 +628,9 @@ void pkgDepCache::MarkKeep(PkgIterator const &Pkg,bool Soft) 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]; @@ -611,7 +647,8 @@ void pkgDepCache::MarkKeep(PkgIterator const &Pkg,bool Soft) if (Pkg->VersionList == 0) return; - P.Flags &= ~Flag::Auto; + if(FromUser && !P.Marked) + P.Flags &= ~Flag::Auto; RemoveSizes(Pkg); RemoveStates(Pkg); @@ -637,6 +674,8 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge) 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); @@ -659,8 +698,6 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge) else P.Mode = ModeDelete; P.InstallVer = 0; - // This was not inverted before, but I think it should be - P.Flags &= ~Flag::Auto; AddStates(Pkg); Update(Pkg); @@ -671,7 +708,7 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge) // --------------------------------------------------------------------- /* */ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, - unsigned long Depth) + unsigned long Depth, bool FromUser) { if (Depth > 100) return; @@ -680,6 +717,8 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, 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]; @@ -688,7 +727,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, P.CandidateVer == (Version *)Pkg.CurrentVer())) { if (P.CandidateVer == (Version *)Pkg.CurrentVer() && P.InstallVer == 0) - MarkKeep(Pkg); + MarkKeep(Pkg, false, FromUser); return; } @@ -708,9 +747,20 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, P.Mode = ModeInstall; P.InstallVer = P.CandidateVer; - // invert the auto-flag only for new installs, not for upgrades - if(P.Status == 0) - 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; @@ -788,13 +838,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, } if (InstPkg.end() == false) - { - MarkInstall(InstPkg,true,Depth + 1); - - // Set the autoflag, after MarkInstall because MarkInstall unsets it - if (P->CurrentVer == 0) - PkgState[InstPkg->ID].Flags |= Flag::Auto; - } + MarkInstall(InstPkg, true, Depth + 1, false); continue; } @@ -809,7 +853,6 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, PkgIterator Pkg = Ver.ParentPkg(); MarkDelete(Pkg); - PkgState[Pkg->ID].Flags |= Flag::Auto; } continue; } @@ -821,6 +864,8 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, /* */ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To) { + ActionGroup group(*this); + RemoveSizes(Pkg); RemoveStates(Pkg); @@ -839,9 +884,11 @@ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To) /* */ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer) { + ActionGroup group(*this); + pkgCache::PkgIterator Pkg = TargetVer.ParentPkg(); StateCache &P = PkgState[Pkg->ID]; - + RemoveSizes(Pkg); RemoveStates(Pkg); @@ -854,6 +901,18 @@ void pkgDepCache::SetCandidateVersion(VerIterator TargetVer) 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 /*{{{*/ // --------------------------------------------------------------------- @@ -944,3 +1003,216 @@ bool pkgDepCache::Policy::IsImportantDep(DepIterator Dep) return Dep.IsCritical(); } /*}}}*/ + +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; +} diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index 619daf8f6..fd935c268 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -1,4 +1,4 @@ -// -*- mode: cpp; mode: fold -*- +// -*- mode: c++; mode: fold -*- // Description /*{{{*/ // $Id: depcache.h,v 1.14 2001/02/20 07:03:17 jgg Exp $ /* ###################################################################### @@ -45,9 +45,71 @@ #include #include +#include + +#include + class pkgDepCache : protected pkgCache::Namespace { public: + + /** \brief An arbitrary predicate on packages. */ + class InRootSetFunc + { + public: + virtual bool InRootSet(const pkgCache::PkgIterator &pkg) {return false;}; + virtual ~InRootSetFunc() {}; + }; + + private: + /** \brief Mark a single package and all its unmarked important + * dependencies during mark-and-sweep. + * + * Recursively invokes itself to mark all dependencies of the + * package. + * + * \param pkg The package to mark. + * + * \param ver The version of the package that is to be marked. + * + * \param follow_recommends If \b true, recommendations of the + * package will be recursively marked. + * + * \param follow_suggests If \b true, suggestions of the package + * will be recursively marked. + */ + void MarkPackage(const pkgCache::PkgIterator &pkg, + const pkgCache::VerIterator &ver, + bool follow_recommends, + bool follow_suggests); + + /** \brief Update the Marked field of all packages. + * + * Each package's StateCache::Marked field will be set to \b true + * if and only if it can be reached from the root set. By + * default, the root set consists of the set of manually installed + * or essential packages, but it can be extended using the + * parameter #rootFunc. + * + * \param rootFunc A callback that can be used to add extra + * packages to the root set. + * + * \return \b false if an error occured. + */ + bool MarkRequired(InRootSetFunc &rootFunc); + + /** \brief Set the StateCache::Garbage flag on all packages that + * should be removed. + * + * Packages that were not marked by the last call to #MarkRequired + * are tested to see whether they are actually garbage. If so, + * they are marked as such. + * + * \return \b false if an error occured. + */ + bool Sweep(); + + public: // These flags are used in DepState enum DepFlags {DepNow = (1 << 0),DepInstall = (1 << 1),DepCVer = (1 << 2), @@ -64,6 +126,83 @@ class pkgDepCache : protected pkgCache::Namespace enum VersionTypes {NowVersion, InstallVersion, CandidateVersion}; enum ModeList {ModeDelete = 0, ModeKeep = 1, ModeInstall = 2}; + /** \brief Represents an active action group. + * + * An action group is a group of actions that are currently being + * performed. While an active group is active, certain routine + * clean-up actions that would normally be performed after every + * cache operation are delayed until the action group is + * completed. This is necessary primarily to avoid inefficiencies + * when modifying a large number of packages at once. + * + * This class represents an active action group. Creating an + * instance will create an action group; destroying one will + * destroy the corresponding action group. + * + * The following operations are suppressed by this class: + * + * - Keeping the Marked and Garbage flags up to date. + * + * \note This can be used in the future to easily accumulate + * atomic actions for undo or to display "what apt did anyway"; + * e.g., change the counter of how many action groups are active + * to a std::set of pointers to them and use those to store + * information about what happened in a group in the group. + */ + class ActionGroup + { + pkgDepCache &cache; + + bool released; + + /** Action groups are noncopyable. */ + ActionGroup(const ActionGroup &other); + public: + /** \brief Create a new ActionGroup. + * + * \param cache The cache that this ActionGroup should + * manipulate. + * + * As long as this object exists, no automatic cleanup + * operations will be undertaken. + */ + ActionGroup(pkgDepCache &cache); + + /** \brief Clean up the action group before it is destroyed. + * + * If it is destroyed later, no second cleanup wil be run. + */ + void release(); + + /** \brief Destroy the action group. + * + * If this is the last action group, the automatic cache + * cleanup operations will be undertaken. + */ + ~ActionGroup(); + }; + + /** \brief Returns \b true for packages matching a regular + * expression in APT::NeverAutoRemove. + */ + class DefaultRootSetFunc : public InRootSetFunc + { + std::vector rootSetRegexp; + bool constructedSuccessfully; + + public: + DefaultRootSetFunc(); + ~DefaultRootSetFunc(); + + /** \return \b true if the class initialized successfully, \b + * false otherwise. Used to avoid throwing an exception, since + * APT classes generally don't. + */ + bool wasConstructedSuccessfully() const { return constructedSuccessfully; } + + bool InRootSet(const pkgCache::PkgIterator &pkg); + }; + struct StateCache { // Epoch stripped text versions of the two version fields @@ -80,8 +219,15 @@ class pkgDepCache : protected pkgCache::Namespace unsigned short Flags; unsigned short iFlags; // Internal flags - // mark and sweep flags + /** \brief \b true if this package can be reached from the root set. */ bool Marked; + + /** \brief \b true if this package is unused and should be removed. + * + * This differs from !#Marked, because it is possible that some + * unreachable packages will be protected from becoming + * garbage. + */ bool Garbage; // Various tree indicators @@ -124,6 +270,14 @@ class pkgDepCache : protected pkgCache::Namespace virtual ~Policy() {}; }; + + private: + /** The number of open "action groups"; certain post-action + * operations are suppressed if this number is > 0. + */ + int group_level; + + friend class ActionGroup; protected: @@ -187,13 +341,61 @@ class pkgDepCache : protected pkgCache::Namespace inline StateCache &operator [](PkgIterator const &I) {return PkgState[I->ID];}; inline unsigned char &operator [](DepIterator const &I) {return DepState[I->ID];}; - // Manipulators - void MarkKeep(PkgIterator const &Pkg,bool Soft = false); + /** \return A function identifying packages in the root set other + * than manually installed packages and essential packages, or \b + * NULL if an error occurs. + * + * \todo Is this the best place for this function? Perhaps the + * settings for mark-and-sweep should be stored in a single + * external class? + */ + virtual InRootSetFunc *GetRootSetFunc(); + + /** \return \b true if the garbage collector should follow recommendations. + */ + virtual bool MarkFollowsRecommends(); + + /** \return \b true if the garbage collector should follow suggestions. + */ + virtual bool MarkFollowsSuggests(); + + /** \brief Update the Marked and Garbage fields of all packages. + * + * This routine is implicitly invoked after all state manipulators + * and when an ActionGroup is destroyed. It invokes #MarkRequired + * and #Sweep to do its dirty work. + * + * \param rootFunc A predicate that returns \b true for packages + * that should be added to the root set. + */ + bool MarkAndSweep(InRootSetFunc &rootFunc) + { + return MarkRequired(rootFunc) && Sweep(); + } + + bool MarkAndSweep() + { + std::auto_ptr f(GetRootSetFunc()); + if(f.get() != NULL) + return MarkAndSweep(*f.get()); + else + return false; + } + + /** \name State Manipulators + */ + // @{ + void MarkKeep(PkgIterator const &Pkg, bool Soft = false, + bool FromUser = true); void MarkDelete(PkgIterator const &Pkg,bool Purge = false); void MarkInstall(PkgIterator const &Pkg,bool AutoInst = true, - unsigned long Depth = 0); + unsigned long Depth = 0, bool FromUser = true); void SetReInstall(PkgIterator const &Pkg,bool To); void SetCandidateVersion(VerIterator TargetVer); + + /** Set the "is automatically installed" flag of Pkg. */ + void MarkAuto(const PkgIterator &Pkg, bool Auto); + // @} // This is for debuging void Update(OpProgress *Prog = 0); diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 87a21004f..05615db79 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -106,7 +106,7 @@ bool pkgPackageManager::FixMissing() // Okay, this file is missing and we need it. Mark it for keep Bad = true; - Cache.MarkKeep(I); + Cache.MarkKeep(I, false, false); } // We have to empty the list otherwise it will not have the new changes diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index ac0d56073..c8b64f5d8 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1370,19 +1370,23 @@ bool DoAutomaticRemove(CacheFile &Cache) return _error->Error(_("We are not supposed to delete stuff, can't " "start AutoRemover")); - // do the actual work - pkgMarkUsed(Cache); - - // look over the cache to see what can be removed - for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) { - if (Cache[Pkg].Garbage && - (Pkg->CurrentVer != 0 && Cache[Pkg].Install() == false && - Cache[Pkg].Delete() == false)) - { - fprintf(stdout,"We could delete %s\n", Pkg.Name()); - Cache->MarkDelete(Pkg,_config->FindB("APT::Get::Purge",false)); - } + pkgDepCache::ActionGroup group(*Cache); + + // look over the cache to see what can be removed + for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) + { + if (Cache[Pkg].Garbage) + { + if(Pkg.CurrentVer() != 0 || Cache[Pkg].Install()) + fprintf(stdout,"We could delete %s\n", Pkg.Name()); + + if(Pkg.CurrentVer() != 0 && Pkg->CurrentState != pkgCache::State::ConfigFiles) + Cache->MarkDelete(Pkg, _config->FindB("APT::Get::Purge", false)); + else + Cache->MarkKeep(Pkg, false, false); + } + } } // Now see if we destroyed anything @@ -1399,6 +1403,7 @@ bool DoAutomaticRemove(CacheFile &Cache) } return true; } + // DoUpgrade - Upgrade all packages /*{{{*/ // --------------------------------------------------------------------- /* Upgrade all packages without installing new packages or erasing old @@ -1450,6 +1455,11 @@ bool DoInstall(CommandLine &CmdL) bool DefRemove = false; if (strcasecmp(CmdL.FileList[0],"remove") == 0) DefRemove = true; + else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0) + { + _config->Set("APT::Get::AutomaticRemove", "true"); + DefRemove = true; + } for (const char **I = CmdL.FileList + 1; *I != 0; I++) { @@ -2533,6 +2543,7 @@ int main(int argc,const char *argv[]) {"upgrade",&DoUpgrade}, {"install",&DoInstall}, {"remove",&DoInstall}, + {"autoremove",&DoInstall}, {"dist-upgrade",&DoDistUpgrade}, {"dselect-upgrade",&DoDSelectUpgrade}, {"build-dep",&DoBuildDep}, diff --git a/po/apt-all.pot b/po/apt-all.pot index d06c14ce1..bca32b327 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-06-06 14:00+0200\n" +"POT-Creation-Date: 2005-11-02 18:56-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -147,8 +147,8 @@ msgid " %4i %s\n" msgstr "" #: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 -#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:545 -#: cmdline/apt-get.cc:2322 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 +#: cmdline/apt-get.cc:2375 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "" @@ -231,7 +231,7 @@ msgid "" " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" msgstr "" -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:710 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:712 #, c-format msgid "Unable to write to %s" msgstr "" @@ -240,31 +240,31 @@ msgstr "" msgid "Cannot get debconf version. Is debconf installed?" msgstr "" -#: ftparchive/apt-ftparchive.cc:163 ftparchive/apt-ftparchive.cc:337 +#: ftparchive/apt-ftparchive.cc:167 ftparchive/apt-ftparchive.cc:341 msgid "Package extension list is too long" msgstr "" -#: ftparchive/apt-ftparchive.cc:165 ftparchive/apt-ftparchive.cc:179 -#: ftparchive/apt-ftparchive.cc:202 ftparchive/apt-ftparchive.cc:252 -#: ftparchive/apt-ftparchive.cc:266 ftparchive/apt-ftparchive.cc:288 +#: ftparchive/apt-ftparchive.cc:169 ftparchive/apt-ftparchive.cc:183 +#: ftparchive/apt-ftparchive.cc:206 ftparchive/apt-ftparchive.cc:256 +#: ftparchive/apt-ftparchive.cc:270 ftparchive/apt-ftparchive.cc:292 #, c-format msgid "Error processing directory %s" msgstr "" -#: ftparchive/apt-ftparchive.cc:250 +#: ftparchive/apt-ftparchive.cc:254 msgid "Source extension list is too long" msgstr "" -#: ftparchive/apt-ftparchive.cc:367 +#: ftparchive/apt-ftparchive.cc:371 msgid "Error writing header to contents file" msgstr "" -#: ftparchive/apt-ftparchive.cc:397 +#: ftparchive/apt-ftparchive.cc:401 #, c-format msgid "Error processing contents %s" msgstr "" -#: ftparchive/apt-ftparchive.cc:551 +#: ftparchive/apt-ftparchive.cc:556 msgid "" "Usage: apt-ftparchive [options] command\n" "Commands: packages binarypath [overridefile [pathprefix]]\n" @@ -306,11 +306,11 @@ msgid "" " -o=? Set an arbitrary configuration option" msgstr "" -#: ftparchive/apt-ftparchive.cc:757 +#: ftparchive/apt-ftparchive.cc:762 msgid "No selections matched" msgstr "" -#: ftparchive/apt-ftparchive.cc:830 +#: ftparchive/apt-ftparchive.cc:835 #, c-format msgid "Some files are missing in the package file group `%s'" msgstr "" @@ -343,83 +343,83 @@ msgstr "" msgid "Unable to get a cursor" msgstr "" -#: ftparchive/writer.cc:79 +#: ftparchive/writer.cc:78 #, c-format msgid "W: Unable to read directory %s\n" msgstr "" -#: ftparchive/writer.cc:84 +#: ftparchive/writer.cc:83 #, c-format msgid "W: Unable to stat %s\n" msgstr "" -#: ftparchive/writer.cc:126 +#: ftparchive/writer.cc:125 msgid "E: " msgstr "" -#: ftparchive/writer.cc:128 +#: ftparchive/writer.cc:127 msgid "W: " msgstr "" -#: ftparchive/writer.cc:135 +#: ftparchive/writer.cc:134 msgid "E: Errors apply to file " msgstr "" -#: ftparchive/writer.cc:152 ftparchive/writer.cc:182 +#: ftparchive/writer.cc:151 ftparchive/writer.cc:181 #, c-format msgid "Failed to resolve %s" msgstr "" -#: ftparchive/writer.cc:164 +#: ftparchive/writer.cc:163 msgid "Tree walking failed" msgstr "" -#: ftparchive/writer.cc:189 +#: ftparchive/writer.cc:188 #, c-format msgid "Failed to open %s" msgstr "" -#: ftparchive/writer.cc:246 +#: ftparchive/writer.cc:245 #, c-format msgid " DeLink %s [%s]\n" msgstr "" -#: ftparchive/writer.cc:254 +#: ftparchive/writer.cc:253 #, c-format msgid "Failed to readlink %s" msgstr "" -#: ftparchive/writer.cc:258 +#: ftparchive/writer.cc:257 #, c-format msgid "Failed to unlink %s" msgstr "" -#: ftparchive/writer.cc:265 +#: ftparchive/writer.cc:264 #, c-format msgid "*** Failed to link %s to %s" msgstr "" -#: ftparchive/writer.cc:275 +#: ftparchive/writer.cc:274 #, c-format msgid " DeLink limit of %sB hit.\n" msgstr "" #: ftparchive/writer.cc:358 apt-inst/extract.cc:181 apt-inst/extract.cc:193 -#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 +#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:256 #, c-format msgid "Failed to stat %s" msgstr "" -#: ftparchive/writer.cc:378 +#: ftparchive/writer.cc:386 msgid "Archive had no package field" msgstr "" -#: ftparchive/writer.cc:386 ftparchive/writer.cc:595 +#: ftparchive/writer.cc:394 ftparchive/writer.cc:602 #, c-format msgid " %s has no override entry\n" msgstr "" -#: ftparchive/writer.cc:429 ftparchive/writer.cc:677 +#: ftparchive/writer.cc:437 ftparchive/writer.cc:688 #, c-format msgid " %s maintainer is %s not %s\n" msgstr "" @@ -519,200 +519,221 @@ msgstr "" msgid "Failed to rename %s to %s" msgstr "" -#: cmdline/apt-get.cc:118 +#: cmdline/apt-get.cc:119 msgid "Y" msgstr "" -#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1484 +#: cmdline/apt-get.cc:141 cmdline/apt-get.cc:1532 #, c-format msgid "Regex compilation error - %s" msgstr "" -#: cmdline/apt-get.cc:235 +#: cmdline/apt-get.cc:236 msgid "The following packages have unmet dependencies:" msgstr "" -#: cmdline/apt-get.cc:325 +#: cmdline/apt-get.cc:326 #, c-format msgid "but %s is installed" msgstr "" -#: cmdline/apt-get.cc:327 +#: cmdline/apt-get.cc:328 #, c-format msgid "but %s is to be installed" msgstr "" -#: cmdline/apt-get.cc:334 +#: cmdline/apt-get.cc:335 msgid "but it is not installable" msgstr "" -#: cmdline/apt-get.cc:336 +#: cmdline/apt-get.cc:337 msgid "but it is a virtual package" msgstr "" -#: cmdline/apt-get.cc:339 +#: cmdline/apt-get.cc:340 msgid "but it is not installed" msgstr "" -#: cmdline/apt-get.cc:339 +#: cmdline/apt-get.cc:340 msgid "but it is not going to be installed" msgstr "" -#: cmdline/apt-get.cc:344 +#: cmdline/apt-get.cc:345 msgid " or" msgstr "" -#: cmdline/apt-get.cc:373 +#: cmdline/apt-get.cc:374 msgid "The following NEW packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:399 +#: cmdline/apt-get.cc:400 msgid "The following packages will be REMOVED:" msgstr "" -#: cmdline/apt-get.cc:421 +#: cmdline/apt-get.cc:422 msgid "The following packages have been kept back:" msgstr "" -#: cmdline/apt-get.cc:442 +#: cmdline/apt-get.cc:443 msgid "The following packages will be upgraded:" msgstr "" -#: cmdline/apt-get.cc:463 +#: cmdline/apt-get.cc:464 msgid "The following packages will be DOWNGRADED:" msgstr "" -#: cmdline/apt-get.cc:483 +#: cmdline/apt-get.cc:484 msgid "The following held packages will be changed:" msgstr "" -#: cmdline/apt-get.cc:536 +#: cmdline/apt-get.cc:537 #, c-format msgid "%s (due to %s) " msgstr "" -#: cmdline/apt-get.cc:544 +#: cmdline/apt-get.cc:545 msgid "" "WARNING: The following essential packages will be removed.\n" "This should NOT be done unless you know exactly what you are doing!" msgstr "" -#: cmdline/apt-get.cc:575 +#: cmdline/apt-get.cc:576 #, c-format msgid "%lu upgraded, %lu newly installed, " msgstr "" -#: cmdline/apt-get.cc:579 +#: cmdline/apt-get.cc:580 #, c-format msgid "%lu reinstalled, " msgstr "" -#: cmdline/apt-get.cc:581 +#: cmdline/apt-get.cc:582 #, c-format msgid "%lu downgraded, " msgstr "" -#: cmdline/apt-get.cc:583 +#: cmdline/apt-get.cc:584 #, c-format msgid "%lu to remove and %lu not upgraded.\n" msgstr "" -#: cmdline/apt-get.cc:587 +#: cmdline/apt-get.cc:588 #, c-format msgid "%lu not fully installed or removed.\n" msgstr "" -#: cmdline/apt-get.cc:647 +#: cmdline/apt-get.cc:648 msgid "Correcting dependencies..." msgstr "" -#: cmdline/apt-get.cc:650 +#: cmdline/apt-get.cc:651 msgid " failed." msgstr "" -#: cmdline/apt-get.cc:653 +#: cmdline/apt-get.cc:654 msgid "Unable to correct dependencies" msgstr "" -#: cmdline/apt-get.cc:656 +#: cmdline/apt-get.cc:657 msgid "Unable to minimize the upgrade set" msgstr "" -#: cmdline/apt-get.cc:658 +#: cmdline/apt-get.cc:659 msgid " Done" msgstr "" -#: cmdline/apt-get.cc:662 +#: cmdline/apt-get.cc:663 msgid "You might want to run `apt-get -f install' to correct these." msgstr "" -#: cmdline/apt-get.cc:665 +#: cmdline/apt-get.cc:666 msgid "Unmet dependencies. Try using -f." msgstr "" -#: cmdline/apt-get.cc:687 +#: cmdline/apt-get.cc:688 msgid "WARNING: The following packages cannot be authenticated!" msgstr "" -#: cmdline/apt-get.cc:698 +#: cmdline/apt-get.cc:692 +msgid "Authentication warning overridden.\n" +msgstr "" + +#: cmdline/apt-get.cc:699 msgid "Install these packages without verification [y/N]? " msgstr "" -#: cmdline/apt-get.cc:700 +#: cmdline/apt-get.cc:701 msgid "Some packages could not be authenticated" msgstr "" -#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:855 +#: cmdline/apt-get.cc:710 cmdline/apt-get.cc:857 msgid "There are problems and -y was used without --force-yes" msgstr "" -#: cmdline/apt-get.cc:762 +#: cmdline/apt-get.cc:754 +msgid "Internal error, InstallPackages was called with broken packages!" +msgstr "" + +#: cmdline/apt-get.cc:763 msgid "Packages need to be removed but remove is disabled." msgstr "" -#: cmdline/apt-get.cc:788 cmdline/apt-get.cc:1778 cmdline/apt-get.cc:1811 +#: cmdline/apt-get.cc:774 +msgid "Internal error, Ordering didn't finish" +msgstr "" + +#: cmdline/apt-get.cc:790 cmdline/apt-get.cc:1831 cmdline/apt-get.cc:1864 msgid "Unable to lock the download directory" msgstr "" -#: cmdline/apt-get.cc:798 cmdline/apt-get.cc:1859 cmdline/apt-get.cc:2070 +#: cmdline/apt-get.cc:800 cmdline/apt-get.cc:1912 cmdline/apt-get.cc:2123 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "" -#: cmdline/apt-get.cc:818 +#: cmdline/apt-get.cc:815 +msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgstr "" + +#: cmdline/apt-get.cc:820 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:821 +#: cmdline/apt-get.cc:823 #, c-format msgid "Need to get %sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:826 +#: cmdline/apt-get.cc:828 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "" -#: cmdline/apt-get.cc:829 +#: cmdline/apt-get.cc:831 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "" -#: cmdline/apt-get.cc:846 +#: cmdline/apt-get.cc:845 cmdline/apt-get.cc:1978 +#, c-format +msgid "Couldn't determine free space in %s" +msgstr "" + +#: cmdline/apt-get.cc:848 #, c-format msgid "You don't have enough free space in %s." msgstr "" -#: cmdline/apt-get.cc:861 cmdline/apt-get.cc:881 +#: cmdline/apt-get.cc:863 cmdline/apt-get.cc:883 msgid "Trivial Only specified but this is not a trivial operation." msgstr "" -#: cmdline/apt-get.cc:863 +#: cmdline/apt-get.cc:865 msgid "Yes, do as I say!" msgstr "" -#: cmdline/apt-get.cc:865 +#: cmdline/apt-get.cc:867 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -720,74 +741,74 @@ msgid "" " ?] " msgstr "" -#: cmdline/apt-get.cc:871 cmdline/apt-get.cc:890 +#: cmdline/apt-get.cc:873 cmdline/apt-get.cc:892 msgid "Abort." msgstr "" -#: cmdline/apt-get.cc:886 +#: cmdline/apt-get.cc:888 msgid "Do you want to continue [Y/n]? " msgstr "" -#: cmdline/apt-get.cc:958 cmdline/apt-get.cc:1334 cmdline/apt-get.cc:1968 +#: cmdline/apt-get.cc:960 cmdline/apt-get.cc:1337 cmdline/apt-get.cc:2021 #, c-format msgid "Failed to fetch %s %s\n" msgstr "" -#: cmdline/apt-get.cc:976 +#: cmdline/apt-get.cc:978 msgid "Some files failed to download" msgstr "" -#: cmdline/apt-get.cc:977 cmdline/apt-get.cc:1977 +#: cmdline/apt-get.cc:979 cmdline/apt-get.cc:2030 msgid "Download complete and in download only mode" msgstr "" -#: cmdline/apt-get.cc:983 +#: cmdline/apt-get.cc:985 msgid "" "Unable to fetch some archives, maybe run apt-get update or try with --fix-" "missing?" msgstr "" -#: cmdline/apt-get.cc:987 +#: cmdline/apt-get.cc:989 msgid "--fix-missing and media swapping is not currently supported" msgstr "" -#: cmdline/apt-get.cc:992 +#: cmdline/apt-get.cc:994 msgid "Unable to correct missing packages." msgstr "" -#: cmdline/apt-get.cc:993 +#: cmdline/apt-get.cc:995 msgid "Aborting install." msgstr "" -#: cmdline/apt-get.cc:1026 +#: cmdline/apt-get.cc:1029 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "" -#: cmdline/apt-get.cc:1036 +#: cmdline/apt-get.cc:1039 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" msgstr "" -#: cmdline/apt-get.cc:1054 +#: cmdline/apt-get.cc:1057 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "" -#: cmdline/apt-get.cc:1065 +#: cmdline/apt-get.cc:1068 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "" -#: cmdline/apt-get.cc:1077 +#: cmdline/apt-get.cc:1080 msgid " [Installed]" msgstr "" -#: cmdline/apt-get.cc:1082 +#: cmdline/apt-get.cc:1085 msgid "You should explicitly select one to install." msgstr "" -#: cmdline/apt-get.cc:1087 +#: cmdline/apt-get.cc:1090 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -795,79 +816,97 @@ msgid "" "is only available from another source\n" msgstr "" -#: cmdline/apt-get.cc:1106 +#: cmdline/apt-get.cc:1109 msgid "However the following packages replace it:" msgstr "" -#: cmdline/apt-get.cc:1109 +#: cmdline/apt-get.cc:1112 #, c-format msgid "Package %s has no installation candidate" msgstr "" -#: cmdline/apt-get.cc:1129 +#: cmdline/apt-get.cc:1132 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" -#: cmdline/apt-get.cc:1137 +#: cmdline/apt-get.cc:1140 #, c-format msgid "%s is already the newest version.\n" msgstr "" -#: cmdline/apt-get.cc:1164 +#: cmdline/apt-get.cc:1167 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1166 +#: cmdline/apt-get.cc:1169 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1172 +#: cmdline/apt-get.cc:1175 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "" -#: cmdline/apt-get.cc:1282 +#: cmdline/apt-get.cc:1285 msgid "The update command takes no arguments" msgstr "" -#: cmdline/apt-get.cc:1295 cmdline/apt-get.cc:1389 +#: cmdline/apt-get.cc:1298 cmdline/apt-get.cc:1437 msgid "Unable to lock the list directory" msgstr "" -#: cmdline/apt-get.cc:1353 +#: cmdline/apt-get.cc:1356 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." msgstr "" -#: cmdline/apt-get.cc:1372 +#: cmdline/apt-get.cc:1370 +msgid "We are not supposed to delete stuff, can't start AutoRemover" +msgstr "" + +#: cmdline/apt-get.cc:1395 +msgid "" +"Hmm, seems like the AutoRemover destroyed something which really\n" +"shouldn't happen. Please file a bug report against apt." +msgstr "" + +#: cmdline/apt-get.cc:1398 cmdline/apt-get.cc:1600 +msgid "The following information may help to resolve the situation:" +msgstr "" + +#: cmdline/apt-get.cc:1402 +msgid "Internal Error, AutoRemover broke stuff" +msgstr "" + +#: cmdline/apt-get.cc:1420 msgid "Internal error, AllUpgrade broke stuff" msgstr "" -#: cmdline/apt-get.cc:1471 cmdline/apt-get.cc:1507 +#: cmdline/apt-get.cc:1519 cmdline/apt-get.cc:1555 #, c-format msgid "Couldn't find package %s" msgstr "" -#: cmdline/apt-get.cc:1494 +#: cmdline/apt-get.cc:1542 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "" -#: cmdline/apt-get.cc:1524 +#: cmdline/apt-get.cc:1572 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "" -#: cmdline/apt-get.cc:1527 +#: cmdline/apt-get.cc:1575 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." msgstr "" -#: cmdline/apt-get.cc:1539 +#: cmdline/apt-get.cc:1587 msgid "" "Some packages could not be installed. This may mean that you have\n" "requested an impossible situation or if you are using the unstable\n" @@ -875,149 +914,149 @@ msgid "" "or been moved out of Incoming." msgstr "" -#: cmdline/apt-get.cc:1547 +#: cmdline/apt-get.cc:1595 msgid "" "Since you only requested a single operation it is extremely likely that\n" "the package is simply not installable and a bug report against\n" "that package should be filed." msgstr "" -#: cmdline/apt-get.cc:1552 -msgid "The following information may help to resolve the situation:" -msgstr "" - -#: cmdline/apt-get.cc:1555 +#: cmdline/apt-get.cc:1603 msgid "Broken packages" msgstr "" -#: cmdline/apt-get.cc:1581 +#: cmdline/apt-get.cc:1634 msgid "The following extra packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:1652 +#: cmdline/apt-get.cc:1705 msgid "Suggested packages:" msgstr "" -#: cmdline/apt-get.cc:1653 +#: cmdline/apt-get.cc:1706 msgid "Recommended packages:" msgstr "" -#: cmdline/apt-get.cc:1673 +#: cmdline/apt-get.cc:1726 msgid "Calculating upgrade... " msgstr "" -#: cmdline/apt-get.cc:1676 methods/ftp.cc:702 methods/connect.cc:99 +#: cmdline/apt-get.cc:1729 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "" -#: cmdline/apt-get.cc:1681 +#: cmdline/apt-get.cc:1734 msgid "Done" msgstr "" -#: cmdline/apt-get.cc:1854 +#: cmdline/apt-get.cc:1799 cmdline/apt-get.cc:1807 +msgid "Internal error, problem resolver broke stuff" +msgstr "" + +#: cmdline/apt-get.cc:1907 msgid "Must specify at least one package to fetch source for" msgstr "" -#: cmdline/apt-get.cc:1881 cmdline/apt-get.cc:2088 +#: cmdline/apt-get.cc:1934 cmdline/apt-get.cc:2141 #, c-format msgid "Unable to find a source package for %s" msgstr "" -#: cmdline/apt-get.cc:1928 +#: cmdline/apt-get.cc:1981 #, c-format msgid "You don't have enough free space in %s" msgstr "" -#: cmdline/apt-get.cc:1933 +#: cmdline/apt-get.cc:1986 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:1936 +#: cmdline/apt-get.cc:1989 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:1942 +#: cmdline/apt-get.cc:1995 #, c-format msgid "Fetch source %s\n" msgstr "" -#: cmdline/apt-get.cc:1973 +#: cmdline/apt-get.cc:2026 msgid "Failed to fetch some archives." msgstr "" -#: cmdline/apt-get.cc:2001 +#: cmdline/apt-get.cc:2054 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" -#: cmdline/apt-get.cc:2013 +#: cmdline/apt-get.cc:2066 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2030 +#: cmdline/apt-get.cc:2083 #, c-format msgid "Build command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2049 +#: cmdline/apt-get.cc:2102 msgid "Child process failed" msgstr "" -#: cmdline/apt-get.cc:2065 +#: cmdline/apt-get.cc:2118 msgid "Must specify at least one package to check builddeps for" msgstr "" -#: cmdline/apt-get.cc:2093 +#: cmdline/apt-get.cc:2146 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" -#: cmdline/apt-get.cc:2113 +#: cmdline/apt-get.cc:2166 #, c-format msgid "%s has no build depends.\n" msgstr "" -#: cmdline/apt-get.cc:2165 +#: cmdline/apt-get.cc:2218 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "" -#: cmdline/apt-get.cc:2217 +#: cmdline/apt-get.cc:2270 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " "package %s can satisfy version requirements" msgstr "" -#: cmdline/apt-get.cc:2252 +#: cmdline/apt-get.cc:2305 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" -#: cmdline/apt-get.cc:2277 +#: cmdline/apt-get.cc:2330 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "" -#: cmdline/apt-get.cc:2291 +#: cmdline/apt-get.cc:2344 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "" -#: cmdline/apt-get.cc:2295 +#: cmdline/apt-get.cc:2348 msgid "Failed to process build dependencies" msgstr "" -#: cmdline/apt-get.cc:2327 +#: cmdline/apt-get.cc:2380 msgid "Supported modules:" msgstr "" -#: cmdline/apt-get.cc:2368 +#: cmdline/apt-get.cc:2421 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1270,8 +1309,8 @@ msgstr "" msgid "File %s/%s overwrites the one in the package %s" msgstr "" -#: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:709 -#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:416 apt-pkg/clean.cc:38 +#: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750 +#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38 #, c-format msgid "Unable to read %s" msgstr "" @@ -1301,9 +1340,9 @@ msgid "The info and temp directories need to be on the same filesystem" msgstr "" #. Build the status cache -#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:643 -#: apt-pkg/pkgcachegen.cc:712 apt-pkg/pkgcachegen.cc:717 -#: apt-pkg/pkgcachegen.cc:840 +#: apt-inst/deb/dpkgdb.cc:139 apt-pkg/pkgcachegen.cc:645 +#: apt-pkg/pkgcachegen.cc:714 apt-pkg/pkgcachegen.cc:719 +#: apt-pkg/pkgcachegen.cc:842 msgid "Reading package lists" msgstr "" @@ -1431,11 +1470,12 @@ msgstr "" msgid "File not found" msgstr "" -#: methods/copy.cc:42 methods/gzip.cc:133 methods/gzip.cc:142 +#: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133 +#: methods/gzip.cc:142 msgid "Failed to stat" msgstr "" -#: methods/copy.cc:79 methods/gzip.cc:139 +#: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139 msgid "Failed to set modification time" msgstr "" @@ -1495,7 +1535,7 @@ msgstr "" msgid "Server closed the connection" msgstr "" -#: methods/ftp.cc:338 methods/rsh.cc:190 apt-pkg/contrib/fileutl.cc:453 +#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:471 methods/rsh.cc:190 msgid "Read error" msgstr "" @@ -1507,7 +1547,7 @@ msgstr "" msgid "Protocol corruption" msgstr "" -#: methods/ftp.cc:446 methods/rsh.cc:232 apt-pkg/contrib/fileutl.cc:492 +#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:510 methods/rsh.cc:232 msgid "Write error" msgstr "" @@ -1608,43 +1648,79 @@ msgstr "" msgid "Cannot initiate the connection to %s:%s (%s)." msgstr "" -#: methods/connect.cc:92 +#: methods/connect.cc:93 #, c-format msgid "Could not connect to %s:%s (%s), connection timed out" msgstr "" -#: methods/connect.cc:104 +#: methods/connect.cc:106 #, c-format msgid "Could not connect to %s:%s (%s)." msgstr "" #. We say this mainly because the pause here is for the #. ssh connection that is still going -#: methods/connect.cc:132 methods/rsh.cc:425 +#: methods/connect.cc:134 methods/rsh.cc:425 #, c-format msgid "Connecting to %s" msgstr "" -#: methods/connect.cc:163 +#: methods/connect.cc:165 #, c-format msgid "Could not resolve '%s'" msgstr "" -#: methods/connect.cc:167 +#: methods/connect.cc:169 #, c-format msgid "Temporary failure resolving '%s'" msgstr "" -#: methods/connect.cc:169 +#: methods/connect.cc:171 #, c-format msgid "Something wicked happened resolving '%s:%s' (%i)" msgstr "" -#: methods/connect.cc:216 +#: methods/connect.cc:218 #, c-format msgid "Unable to connect to %s %s:" msgstr "" +#: methods/gpgv.cc:92 +msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting." +msgstr "" + +#: methods/gpgv.cc:191 +msgid "" +"Internal error: Good signature, but could not determine key fingerprint?!" +msgstr "" + +#: methods/gpgv.cc:196 +msgid "At least one invalid signature was encountered." +msgstr "" + +#. FIXME String concatenation considered harmful. +#: methods/gpgv.cc:201 +msgid "Could not execute " +msgstr "" + +#: methods/gpgv.cc:202 +msgid " to verify signature (is gnupg installed?)" +msgstr "" + +#: methods/gpgv.cc:206 +msgid "Unknown error executing gpgv" +msgstr "" + +#: methods/gpgv.cc:237 +msgid "The following signatures were invalid:\n" +msgstr "" + +#: methods/gpgv.cc:244 +msgid "" +"The following signatures couldn't be verified because the public key is not " +"available:\n" +msgstr "" + #: methods/gzip.cc:57 #, c-format msgid "Couldn't open pipe for %s" @@ -1728,10 +1804,6 @@ msgstr "" msgid "Internal error" msgstr "" -#: methods/rsh.cc:330 -msgid "Connection closed prematurely" -msgstr "" - #: apt-pkg/contrib/mmap.cc:82 msgid "Can't mmap an empty file" msgstr "" @@ -1746,57 +1818,57 @@ msgstr "" msgid "Selection %s not found" msgstr "" -#: apt-pkg/contrib/configuration.cc:395 +#: apt-pkg/contrib/configuration.cc:436 #, c-format msgid "Unrecognized type abbreviation: '%c'" msgstr "" -#: apt-pkg/contrib/configuration.cc:453 +#: apt-pkg/contrib/configuration.cc:494 #, c-format msgid "Opening configuration file %s" msgstr "" -#: apt-pkg/contrib/configuration.cc:471 +#: apt-pkg/contrib/configuration.cc:512 #, c-format msgid "Line %d too long (max %d)" msgstr "" -#: apt-pkg/contrib/configuration.cc:567 +#: apt-pkg/contrib/configuration.cc:608 #, c-format msgid "Syntax error %s:%u: Block starts with no name." msgstr "" -#: apt-pkg/contrib/configuration.cc:586 +#: apt-pkg/contrib/configuration.cc:627 #, c-format msgid "Syntax error %s:%u: Malformed tag" msgstr "" -#: apt-pkg/contrib/configuration.cc:603 +#: apt-pkg/contrib/configuration.cc:644 #, c-format msgid "Syntax error %s:%u: Extra junk after value" msgstr "" -#: apt-pkg/contrib/configuration.cc:643 +#: apt-pkg/contrib/configuration.cc:684 #, c-format msgid "Syntax error %s:%u: Directives can only be done at the top level" msgstr "" -#: apt-pkg/contrib/configuration.cc:650 +#: apt-pkg/contrib/configuration.cc:691 #, c-format msgid "Syntax error %s:%u: Too many nested includes" msgstr "" -#: apt-pkg/contrib/configuration.cc:654 apt-pkg/contrib/configuration.cc:659 +#: apt-pkg/contrib/configuration.cc:695 apt-pkg/contrib/configuration.cc:700 #, c-format msgid "Syntax error %s:%u: Included from here" msgstr "" -#: apt-pkg/contrib/configuration.cc:663 +#: apt-pkg/contrib/configuration.cc:704 #, c-format msgid "Syntax error %s:%u: Unsupported directive '%s'" msgstr "" -#: apt-pkg/contrib/configuration.cc:697 +#: apt-pkg/contrib/configuration.cc:738 #, c-format msgid "Syntax error %s:%u: Extra junk at end of file" msgstr "" @@ -1862,7 +1934,7 @@ msgstr "" msgid "Unable to stat the mount point %s" msgstr "" -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:422 apt-pkg/clean.cc:44 +#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44 #, c-format msgid "Unable to change to %s" msgstr "" @@ -1871,70 +1943,70 @@ msgstr "" msgid "Failed to stat the cdrom" msgstr "" -#: apt-pkg/contrib/fileutl.cc:80 +#: apt-pkg/contrib/fileutl.cc:82 #, c-format msgid "Not using locking for read only lock file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:85 +#: apt-pkg/contrib/fileutl.cc:87 #, c-format msgid "Could not open lock file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:103 +#: apt-pkg/contrib/fileutl.cc:105 #, c-format msgid "Not using locking for nfs mounted lock file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:107 +#: apt-pkg/contrib/fileutl.cc:109 #, c-format msgid "Could not get lock %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:359 +#: apt-pkg/contrib/fileutl.cc:377 #, c-format msgid "Waited for %s but it wasn't there" msgstr "" -#: apt-pkg/contrib/fileutl.cc:369 +#: apt-pkg/contrib/fileutl.cc:387 #, c-format msgid "Sub-process %s received a segmentation fault." msgstr "" -#: apt-pkg/contrib/fileutl.cc:372 +#: apt-pkg/contrib/fileutl.cc:390 #, c-format msgid "Sub-process %s returned an error code (%u)" msgstr "" -#: apt-pkg/contrib/fileutl.cc:374 +#: apt-pkg/contrib/fileutl.cc:392 #, c-format msgid "Sub-process %s exited unexpectedly" msgstr "" -#: apt-pkg/contrib/fileutl.cc:418 +#: apt-pkg/contrib/fileutl.cc:436 #, c-format msgid "Could not open file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:474 +#: apt-pkg/contrib/fileutl.cc:492 #, c-format msgid "read, still have %lu to read but none left" msgstr "" -#: apt-pkg/contrib/fileutl.cc:504 +#: apt-pkg/contrib/fileutl.cc:522 #, c-format msgid "write, still have %lu to write but couldn't" msgstr "" -#: apt-pkg/contrib/fileutl.cc:579 +#: apt-pkg/contrib/fileutl.cc:597 msgid "Problem closing the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:585 +#: apt-pkg/contrib/fileutl.cc:603 msgid "Problem unlinking the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:596 +#: apt-pkg/contrib/fileutl.cc:614 msgid "Problem syncing the file" msgstr "" @@ -2007,18 +2079,27 @@ msgstr "" msgid "extra" msgstr "" -#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89 +#: apt-pkg/depcache.cc:89 apt-pkg/depcache.cc:118 msgid "Building dependency tree" msgstr "" -#: apt-pkg/depcache.cc:61 +#: apt-pkg/depcache.cc:90 msgid "Candidate versions" msgstr "" -#: apt-pkg/depcache.cc:90 +#: apt-pkg/depcache.cc:119 msgid "Dependency generation" msgstr "" +#: apt-pkg/depcache.cc:140 apt-pkg/depcache.cc:159 apt-pkg/depcache.cc:163 +msgid "Reading state information" +msgstr "" + +#: apt-pkg/depcache.cc:179 +#, c-format +msgid "Failed to write StateFile %s" +msgstr "" + #: apt-pkg/tagfile.cc:73 #, c-format msgid "Unable to parse package file %s (1)" @@ -2092,32 +2173,37 @@ msgstr "" msgid "Index file type '%s' is not supported" msgstr "" -#: apt-pkg/algorithms.cc:241 +#: apt-pkg/algorithms.cc:245 #, c-format msgid "" "The package %s needs to be reinstalled, but I can't find an archive for it." msgstr "" -#: apt-pkg/algorithms.cc:1059 +#: apt-pkg/algorithms.cc:1075 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." msgstr "" -#: apt-pkg/algorithms.cc:1061 +#: apt-pkg/algorithms.cc:1077 msgid "Unable to correct problems, you have held broken packages." msgstr "" -#: apt-pkg/acquire.cc:61 +#: apt-pkg/acquire.cc:62 #, c-format msgid "Lists directory %spartial is missing." msgstr "" -#: apt-pkg/acquire.cc:65 +#: apt-pkg/acquire.cc:66 #, c-format msgid "Archive directory %spartial is missing." msgstr "" +#: apt-pkg/acquire.cc:817 +#, c-format +msgid "Downloading file %li of %li (%s remaining)" +msgstr "" + #: apt-pkg/acquire-worker.cc:112 #, c-format msgid "The method driver %s could not be found." @@ -2167,82 +2253,82 @@ msgstr "" msgid "No priority (or zero) specified for pin" msgstr "" -#: apt-pkg/pkgcachegen.cc:74 +#: apt-pkg/pkgcachegen.cc:76 msgid "Cache has an incompatible versioning system" msgstr "" -#: apt-pkg/pkgcachegen.cc:117 +#: apt-pkg/pkgcachegen.cc:119 #, c-format msgid "Error occurred while processing %s (NewPackage)" msgstr "" -#: apt-pkg/pkgcachegen.cc:129 +#: apt-pkg/pkgcachegen.cc:131 #, c-format msgid "Error occurred while processing %s (UsePackage1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:150 +#: apt-pkg/pkgcachegen.cc:152 #, c-format msgid "Error occurred while processing %s (UsePackage2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:154 +#: apt-pkg/pkgcachegen.cc:156 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:184 +#: apt-pkg/pkgcachegen.cc:186 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:188 +#: apt-pkg/pkgcachegen.cc:190 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "" -#: apt-pkg/pkgcachegen.cc:192 +#: apt-pkg/pkgcachegen.cc:194 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:207 +#: apt-pkg/pkgcachegen.cc:209 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:210 +#: apt-pkg/pkgcachegen.cc:212 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:213 +#: apt-pkg/pkgcachegen.cc:215 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:241 +#: apt-pkg/pkgcachegen.cc:243 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "" -#: apt-pkg/pkgcachegen.cc:254 +#: apt-pkg/pkgcachegen.cc:256 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "" -#: apt-pkg/pkgcachegen.cc:260 +#: apt-pkg/pkgcachegen.cc:262 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "" -#: apt-pkg/pkgcachegen.cc:574 +#: apt-pkg/pkgcachegen.cc:576 #, c-format msgid "Couldn't stat source package list %s" msgstr "" -#: apt-pkg/pkgcachegen.cc:658 +#: apt-pkg/pkgcachegen.cc:660 msgid "Collecting File Provides" msgstr "" -#: apt-pkg/pkgcachegen.cc:785 apt-pkg/pkgcachegen.cc:792 +#: apt-pkg/pkgcachegen.cc:787 apt-pkg/pkgcachegen.cc:794 msgid "IO Error saving source cache" msgstr "" @@ -2251,31 +2337,31 @@ msgstr "" msgid "rename failed, %s (%s -> %s)." msgstr "" -#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:900 +#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:906 msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:714 +#: apt-pkg/acquire-item.cc:720 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" msgstr "" -#: apt-pkg/acquire-item.cc:767 +#: apt-pkg/acquire-item.cc:773 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " "manually fix this package." msgstr "" -#: apt-pkg/acquire-item.cc:803 +#: apt-pkg/acquire-item.cc:809 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:890 +#: apt-pkg/acquire-item.cc:896 msgid "Size mismatch" msgstr "" @@ -2373,3 +2459,57 @@ msgstr "" #, c-format msgid "Wrote %i records with %i missing files and %i mismatched files\n" msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:358 +#, c-format +msgid "Preparing %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:359 +#, c-format +msgid "Unpacking %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:364 +#, c-format +msgid "Preparing to configure %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:365 +#, c-format +msgid "Configuring %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:366 +#, c-format +msgid "Installed %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:371 +#, c-format +msgid "Preparing for removal of %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:372 +#, c-format +msgid "Removing %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:373 +#, c-format +msgid "Removed %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:378 +#, c-format +msgid "Preparing for remove with config %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:379 +#, c-format +msgid "Removed with config %s" +msgstr "" + +#: methods/rsh.cc:330 +msgid "Connection closed prematurely" +msgstr "" -- cgit v1.2.3-70-g09d2