summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2010-12-03 14:02:29 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2010-12-03 14:02:29 +0100
commita8dfff90aa740889eb99d00fde5d70908d9fd88a (patch)
treeb55f8a09ec4f8d50db5f4bdad5f067df4ade10bd
parentdb4b5f77e1f9f64a54baeff74c0400f0134c1d0d (diff)
keep not installed garbage packages uninstalled instead of showing
in the autoremove section and installing those (Closes: #604222)
-rw-r--r--cmdline/apt-get.cc40
-rw-r--r--debian/changelog4
-rw-r--r--test/integration/Packages-bug-604222-new-and-autoremove68
-rw-r--r--test/integration/status-bug-604222-new-and-autoremove10
-rwxr-xr-xtest/integration/test-bug-604222-new-and-autoremove66
5 files changed, 169 insertions, 19 deletions
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index ca510178a..57065c528 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -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;
}
/*}}}*/
diff --git a/debian/changelog b/debian/changelog
index 56865f713..65603587d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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
index 000000000..fdff9d702
--- /dev/null
+++ b/test/integration/Packages-bug-604222-new-and-autoremove
@@ -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
index 000000000..03cf4d307
--- /dev/null
+++ b/test/integration/status-bug-604222-new-and-autoremove
@@ -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
index 000000000..fa6dcdc70
--- /dev/null
+++ b/test/integration/test-bug-604222-new-and-autoremove
@@ -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