summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2010-08-28 22:26:32 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2010-08-28 22:26:32 +0200
commitb093a199056673b55e6467ab9e22e8af15183c43 (patch)
treea7e26503f1f4325691612a6be4ed20233bcfe58e
parente56aac77a45e7a9a5620be12dfae0e2296f1d560 (diff)
* apt-pkg/contrib/configuration.cc:
- fix autoremove by using correct config-option name and don't make faulty assumptions in error handling (Closes: #594689)
-rw-r--r--apt-pkg/contrib/configuration.cc14
-rw-r--r--apt-pkg/contrib/configuration.h1
-rw-r--r--apt-pkg/depcache.h2
-rw-r--r--debian/changelog5
-rwxr-xr-xtest/integration/test-autoremove31
5 files changed, 48 insertions, 5 deletions
diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc
index 81cc87d15..cc7093fe2 100644
--- a/apt-pkg/contrib/configuration.cc
+++ b/apt-pkg/contrib/configuration.cc
@@ -857,19 +857,27 @@ Configuration::MatchAgainstConfig::MatchAgainstConfig(char const * Config)
{
regfree(p);
delete p;
+ clearPatterns();
_error->Warning("Regex compilation error for '%s' in configuration option '%s'",
s->c_str(), Config);
+ return;
}
- }
-
+ }
+ if (strings.size() == 0)
+ patterns.push_back(NULL);
}
/*}}}*/
// MatchAgainstConfig Destructor /*{{{*/
Configuration::MatchAgainstConfig::~MatchAgainstConfig()
{
+ clearPatterns();
+}
+void Configuration::MatchAgainstConfig::clearPatterns()
+{
for(std::vector<regex_t *>::const_iterator p = patterns.begin();
p != patterns.end(); ++p)
{
+ if (*p == NULL) continue;
regfree(*p);
delete *p;
}
@@ -880,7 +888,7 @@ bool Configuration::MatchAgainstConfig::Match(char const * str) const
{
for(std::vector<regex_t *>::const_iterator p = patterns.begin();
p != patterns.end(); ++p)
- if (regexec(*p, str, 0, 0, 0) == 0)
+ if (*p != NULL && regexec(*p, str, 0, 0, 0) == 0)
return true;
return false;
diff --git a/apt-pkg/contrib/configuration.h b/apt-pkg/contrib/configuration.h
index cbe18e4e5..175c1bef3 100644
--- a/apt-pkg/contrib/configuration.h
+++ b/apt-pkg/contrib/configuration.h
@@ -109,6 +109,7 @@ class Configuration
class MatchAgainstConfig
{
std::vector<regex_t *> patterns;
+ void clearPatterns();
public:
MatchAgainstConfig(char const * Config);
diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h
index 45276dc95..08e683558 100644
--- a/apt-pkg/depcache.h
+++ b/apt-pkg/depcache.h
@@ -186,7 +186,7 @@ class pkgDepCache : protected pkgCache::Namespace
class DefaultRootSetFunc : public InRootSetFunc, public Configuration::MatchAgainstConfig
{
public:
- DefaultRootSetFunc() : Configuration::MatchAgainstConfig("APT::NeverRemove") {};
+ DefaultRootSetFunc() : Configuration::MatchAgainstConfig("APT::NeverAutoRemove") {};
virtual ~DefaultRootSetFunc() {};
bool InRootSet(const pkgCache::PkgIterator &pkg) { return pkg.end() == true && Match(pkg.Name()); };
diff --git a/debian/changelog b/debian/changelog
index 4ec71cbb6..072c00398 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -26,8 +26,11 @@ apt (0.8.1) UNRELEASED; urgency=low
pass this purge forward to the non-pseudo package for pseudos
* apt-pkg/contrib/fileutl.cc:
- apply SilentlyIgnore also on files without an extension
+ * apt-pkg/contrib/configuration.cc:
+ - fix autoremove by using correct config-option name and
+ don't make faulty assumptions in error handling (Closes: #594689)
- -- David Kalnischkies <kalnischkies@gmail.com> Sat, 28 Aug 2010 17:53:00 +0200
+ -- David Kalnischkies <kalnischkies@gmail.com> Sat, 28 Aug 2010 22:23:20 +0200
apt (0.8.0) unstable; urgency=low
diff --git a/test/integration/test-autoremove b/test/integration/test-autoremove
new file mode 100755
index 000000000..fb39e979a
--- /dev/null
+++ b/test/integration/test-autoremove
@@ -0,0 +1,31 @@
+#!/bin/sh
+set -e
+
+local TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture "i386"
+
+buildsimplenativepackage "unrelated" "all" "1" "unstable"
+buildsimplenativepackage "po-debconf" "all" "1.0.16" "unstable"
+buildsimplenativepackage "debhelper" "all" "8.0.0" "unstable" "Depends: po-debconf"
+setupaptarchive
+
+aptget install unrelated debhelper -qq 2>&1 > /dev/null
+
+testfileequal "rootdir/var/lib/apt/extended_states" "Package: po-debconf
+Architecture: i386
+Auto-Installed: 1
+"
+aptget remove debhelper -y -qq 2>&1 > /dev/null
+aptget autoremove -y -qq 2>&1 > /dev/null
+
+testfileequal "rootdir/var/lib/apt/extended_states" ""
+
+sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d'
+testfileequal "rootdir/var/log/apt/history.log" '
+Install: unrelated:i386 (1), debhelper:i386 (8.0.0), po-debconf:i386 (1.0.16, automatic)
+
+Remove: debhelper:i386 (8.0.0)
+
+Remove: po-debconf:i386 (1.0.16)'