diff options
author | Michael Vogt <michael.vogt@ubuntu.com> | 2005-11-09 11:39:27 +0000 |
---|---|---|
committer | Michael Vogt <michael.vogt@ubuntu.com> | 2005-11-09 11:39:27 +0000 |
commit | 74a05226eff7041cd8f2380fe599862d350a1ac3 (patch) | |
tree | 6881f515e054666354a51928fae0657beb02b15e /cmdline | |
parent | 331956f9b59c8c30cce977e8729991559d46005c (diff) |
* 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'.
Diffstat (limited to 'cmdline')
-rw-r--r-- | cmdline/apt-get.cc | 35 |
1 files changed, 23 insertions, 12 deletions
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}, |