]> git.saurik.com Git - apt.git/commitdiff
* apt-pkg/depcache.cc:
authorMichael Vogt <michael.vogt@ubuntu.com>
Thu, 21 Sep 2006 00:02:13 +0000 (02:02 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Thu, 21 Sep 2006 00:02:13 +0000 (02:02 +0200)
  - do not change the auto-flag in MarkKeep() to prevent side-effects
    in interactive package managers when a package is marked for remove
    first and then unmarked again. the old code removed the auto-flag,
    the new code will retain this information
  - a package can be garbage even if it is already marked for removal

apt-pkg/depcache.cc

index 369eae70b3418d3a73e86bd2a125c87e42214636..2bae94026933167b32caf0ad5adfce4be3d89c31 100644 (file)
@@ -701,9 +701,18 @@ void pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser)
    // We dont even try to keep virtual packages..
    if (Pkg->VersionList == 0)
       return;
-   
+
+#if 0 // reseting the autoflag here means we lose the 
+      // auto-mark information if a user selects a package for removal
+      // but changes  his mind then and sets it for keep again
+      // - this makes sense as default when all Garbage dependencies
+      //   are automatically marked for removal (as aptitude does).
+      //   setting a package for keep then makes it no longer autoinstalled
+      //   for all other use-case this action is rather suprising
    if(FromUser && !P.Marked)
      P.Flags &= ~Flag::Auto;
+#endif
+
    RemoveSizes(Pkg);
    RemoveStates(Pkg);
 
@@ -1265,8 +1274,7 @@ bool pkgDepCache::Sweep()
      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())
+     if(!state.Marked && (!p.CurrentVer().end() || state.Install()))
      {
        state.Garbage=true;
        if(_config->FindB("Debug::pkgAutoRemove",false))