]> git.saurik.com Git - apt.git/commitdiff
keep not installed garbage packages uninstalled instead of showing
authorDavid Kalnischkies <kalnischkies@gmail.com>
Fri, 3 Dec 2010 13:02:29 +0000 (14:02 +0100)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Fri, 3 Dec 2010 13:02:29 +0000 (14:02 +0100)
in the autoremove section and installing those (Closes: #604222)

cmdline/apt-get.cc
debian/changelog
test/integration/Packages-bug-604222-new-and-autoremove [new file with mode: 0644]
test/integration/status-bug-604222-new-and-autoremove [new file with mode: 0644]
test/integration/test-bug-604222-new-and-autoremove [new file with mode: 0755]

index ca510178add51ced9db7dede872db1911373262b..57065c528960fbee7bd8f4c9425625c38a7fe194 100644 (file)
@@ -1608,10 +1608,6 @@ bool DoAutomaticRemove(CacheFile &Cache)
    if(Debug)
       std::cout << "DoAutomaticRemove()" << std::endl;
 
-   // we don't want to autoremove and we don't want to see it, so why calculating?
-   if (doAutoRemove == false && hideAutoRemove == true)
-      return true;
-
    if (doAutoRemove == true &&
        _config->FindB("APT::Get::Remove",true) == false)
    {
@@ -1622,7 +1618,9 @@ bool DoAutomaticRemove(CacheFile &Cache)
 
    bool purgePkgs = _config->FindB("APT::Get::Purge", false);
    bool smallList = (hideAutoRemove == false &&
-       strcasecmp(_config->Find("APT::Get::HideAutoRemove","").c_str(),"small") == 0);
+               strcasecmp(_config->Find("APT::Get::HideAutoRemove","").c_str(),"small") == 0) ||
+       // we don't want to autoremove and we don't want to see it, so don't generate lists
+       (doAutoRemove == false && hideAutoRemove == true);
 
    string autoremovelist, autoremoveversions;
    unsigned long autoRemoveCount = 0;
@@ -1645,8 +1643,12 @@ bool DoAutomaticRemove(CacheFile &Cache)
         }
         else
         {
+           // if the package is a new install and already garbage we don't need to
+           // install it in the first place, so nuke it instead of show it
+           if (Cache[Pkg].Install() == true && Pkg.CurrentVer() == 0)
+              Cache->MarkDelete(Pkg, false);
            // only show stuff in the list that is not yet marked for removal
-           if(Cache[Pkg].Delete() == false) 
+           else if(Cache[Pkg].Delete() == false) 
            {
               ++autoRemoveCount;
               // we don't need to fill the strings if we don't need them
@@ -1659,6 +1661,20 @@ bool DoAutomaticRemove(CacheFile &Cache)
         }
       }
    }
+
+   // Now see if we had destroyed anything (if we had done anything)
+   if (Cache->BrokenCount() != 0)
+   {
+      c1out << _("Hmm, seems like the AutoRemover destroyed something which really\n"
+                "shouldn't happen. Please file a bug report against apt.") << endl;
+      c1out << endl;
+      c1out << _("The following information may help to resolve the situation:") << endl;
+      c1out << endl;
+      ShowBroken(c1out,Cache,false);
+
+      return _error->Error(_("Internal Error, AutoRemover broke stuff"));
+   }
+
    // if we don't remove them, we should show them!
    if (doAutoRemove == false && (autoremovelist.empty() == false || autoRemoveCount != 0))
    {
@@ -1671,18 +1687,6 @@ bool DoAutomaticRemove(CacheFile &Cache)
                  "%lu packages were automatically installed and are no longer required.\n", autoRemoveCount), autoRemoveCount);
       c1out << _("Use 'apt-get autoremove' to remove them.") << std::endl;
    }
-   // Now see if we had destroyed anything (if we had done anything)
-   else if (Cache->BrokenCount() != 0)
-   {
-      c1out << _("Hmm, seems like the AutoRemover destroyed something which really\n"
-                "shouldn't happen. Please file a bug report against apt.") << endl;
-      c1out << endl;
-      c1out << _("The following information may help to resolve the situation:") << endl;
-      c1out << endl;
-      ShowBroken(c1out,Cache,false);
-
-      return _error->Error(_("Internal Error, AutoRemover broke stuff"));
-   }
    return true;
 }
                                                                        /*}}}*/
index 56865f713846daa9d0380653021a896042363ba8..65603587dcdb0686de7a05c168cd10f019f38c29 100644 (file)
@@ -5,10 +5,12 @@ apt (0.8.11+wheezy) unstable; urgency=low
       progress, lock nor the directories it would create otherwise
     - show dependencies of essential packages which are going to remove
       only if they cause the remove of this essential (Closes: #601961)
+    - keep not installed garbage packages uninstalled instead of showing
+      in the autoremove section and installing those (Closes: #604222)
   * debian/control:
     - add Vcs-Browser now that loggerhead works again (Closes: #511168)
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Tue, 30 Nov 2010 19:16:31 +0100
+ -- David Kalnischkies <kalnischkies@gmail.com>  Fri, 03 Dec 2010 14:00:18 +0100
 
 apt (0.8.10) unstable; urgency=low
 
diff --git a/test/integration/Packages-bug-604222-new-and-autoremove b/test/integration/Packages-bug-604222-new-and-autoremove
new file mode 100644 (file)
index 0000000..fdff9d7
--- /dev/null
@@ -0,0 +1,68 @@
+Package: dummy-archive
+Priority: extra
+Section: admin
+Installed-Size: 5984
+Maintainer: APT Development Team <deity@lists.debian.org>
+Architecture: i386
+Version: 0.invalid.0
+Source: dummy-archive
+Depends: libavcodec52, libvtk5-dev | libopenal-dev
+Filename: pool/main/d/dummy/dummy_5.4.2-8_i386.deb
+Size: 2280898
+MD5sum: 569719746f7ec4b96209a6152af20c00
+Description: some dummy package
+
+Package: libvtk5-dev
+Priority: optional
+Section: libdevel
+Installed-Size: 13812
+Maintainer: A. Maitland Bottoms <bottoms@debian.org>
+Architecture: i386
+Source: vtk
+Version: 5.4.2-8
+Depends: libvtk5.4 (= 5.4.2-8)
+Filename: pool/main/v/vtk/libvtk5-dev_5.4.2-8_i386.deb
+Size: 2280898
+MD5sum: 569719746f7ec4b96209a6152af20c00
+Description: VTK header files for building C++ code
+
+Package: libvtk5.4
+Priority: optional
+Section: libs
+Installed-Size: 39372
+Maintainer: A. Maitland Bottoms <bottoms@debian.org>
+Architecture: i386
+Source: vtk
+Version: 5.4.2-8
+Depends: libavcodec52 (>= 4:0.5.1-1)
+Filename: pool/main/v/vtk/libvtk5.4_5.4.2-8_i386.deb
+Size: 13070848
+MD5sum: 3ba7abc3d58ec44e35ae71879406563d
+Description: Visualization Toolkit - A high level 3D visualization library
+
+Package: libopenal-dev
+Priority: optional
+Section: libdevel
+Installed-Size: 140
+Maintainer: Debian Games Team <pkg-games-devel@lists.alioth.debian.org>
+Architecture: i386
+Source: openal-soft
+Version: 1:1.12.854-2
+Filename: pool/main/o/openal-soft/libopenal-dev_1.12.854-2_i386.deb
+Size: 21014
+MD5sum: e0bda4fbf5a3d38ef510a23a1642587f
+Description-de: Software-Implementierung der OpenAL-API (Entwicklungsdateien)
+
+Package: libavcodec52
+Priority: optional
+Section: libs
+Installed-Size: 10772
+Maintainer: Debian multimedia packages maintainers <pkg-multimedia-maintainers@lists.alioth.debian.org>
+Architecture: i386
+Source: ffmpeg
+Version: 4:0.5.2-6
+Conflicts: libvtk5-dev
+Filename: pool/main/f/ffmpeg/libavcodec52_0.5.2-6_i386.deb
+Size: 4001600
+MD5sum: a50aae4c8e8b9dd29612407e61bedc22
+Description-de: Ffmpeg-Codec-Bibliothek
diff --git a/test/integration/status-bug-604222-new-and-autoremove b/test/integration/status-bug-604222-new-and-autoremove
new file mode 100644 (file)
index 0000000..03cf4d3
--- /dev/null
@@ -0,0 +1,10 @@
+Package: libvtk5.4
+Status: install ok installed
+Priority: optional
+Section: libs
+Installed-Size: 39372
+Maintainer: A. Maitland Bottoms <bottoms@debian.org>
+Architecture: i386
+Source: vtk
+Version: 5.4.2-7
+Description: Visualization Toolkit - A high level 3D visualization library
diff --git a/test/integration/test-bug-604222-new-and-autoremove b/test/integration/test-bug-604222-new-and-autoremove
new file mode 100755 (executable)
index 0000000..fa6dcdc
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/sh
+set -e
+
+local TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture "i386"
+setupaptarchive
+
+echo 'Package: libvtk5.4
+Auto-Installed: 1
+Architecture: i386' > rootdir/var/lib/apt/extended_states
+
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following package was automatically installed and is no longer required:
+  libvtk5.4
+Use 'apt-get autoremove' to remove them.
+The following NEW packages will be installed:
+  libavcodec52
+0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
+Inst libavcodec52 (4:0.5.2-6 localhost [i386])
+Conf libavcodec52 (4:0.5.2-6 localhost [i386])" aptget install libavcodec52 -s
+
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following package was automatically installed and is no longer required:
+  libvtk5.4
+Use 'apt-get autoremove' to remove them.
+The following extra packages will be installed:
+  libavcodec52 libopenal-dev libvtk5.4
+The following NEW packages will be installed:
+  dummy-archive libavcodec52 libopenal-dev
+The following packages will be upgraded:
+  libvtk5.4
+1 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Need to get 0 B/19.4 MB of archives.
+After this operation, 17.3 MB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation." aptget install dummy-archive --trivial-only
+
+echo -n > rootdir/var/lib/dpkg/status
+rm rootdir/var/lib/apt/extended_states
+
+CONFLICTING='Reading package lists...
+Building dependency tree...
+  MarkInstall dummy-archive [ i386 ] < none -> 0.invalid.0 > ( admin ) FU=1
+    MarkInstall libavcodec52 [ i386 ] < none -> 4:0.5.2-6 > ( libs ) FU=0
+    MarkInstall libvtk5-dev [ i386 ] < none -> 5.4.2-8 > ( libdevel ) FU=0
+      MarkInstall libvtk5.4 [ i386 ] < none -> 5.4.2-8 > ( libs ) FU=0
+  MarkKeep libvtk5-dev [ i386 ] < none -> 5.4.2-8 > ( libdevel ) FU=0
+  MarkKeep libvtk5-dev [ i386 ] < none -> 5.4.2-8 > ( libdevel ) FU=0
+  MarkDelete libvtk5.4 [ i386 ] < none -> 5.4.2-8 > ( libs ) FU=1
+The following extra packages will be installed:
+  libavcodec52 libopenal-dev
+The following NEW packages will be installed:
+  dummy-archive libavcodec52 libopenal-dev
+0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
+Need to get 0 B/6304 kB of archives.
+After this operation, 17.3 MB of additional disk space will be used.
+E: Trivial Only specified but this is not a trivial operation.'
+
+testequal "$CONFLICTING" aptget install dummy-archive --trivial-only -o Debug::pkgDepCache::Marker=1 -o APT::Get::HideAutoRemove=0
+testequal "$CONFLICTING" aptget install dummy-archive --trivial-only -o Debug::pkgDepCache::Marker=1 -o APT::Get::HideAutoRemove=1
+testequal "$CONFLICTING" aptget install dummy-archive --trivial-only -o Debug::pkgDepCache::Marker=1 -o APT::Get::HideAutoRemove=small