summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-12-23 17:48:16 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2015-12-23 17:48:16 +0100
commit8d968cc2d1e11da81f3bab878c1a413a97ca27ed (patch)
tree33c558f0a730625e15cca4d234207e7fc7cda465
parentb3db9d81325769fb9d9c6518f9d917f90328bef1 (diff)
downloadapt-8d968cc2d1e11da81f3bab878c1a413a97ca27ed.tar.gz
ensure we got a lock in clean operation
We try to acquired the locks, but we didn't stop if we failed to get it… Closes: 808561
-rw-r--r--apt-private/private-download.cc8
-rwxr-xr-xtest/integration/test-apt-get-clean10
2 files changed, 14 insertions, 4 deletions
diff --git a/apt-private/private-download.cc b/apt-private/private-download.cc
index 5cdcf6038..6f672635f 100644
--- a/apt-private/private-download.cc
+++ b/apt-private/private-download.cc
@@ -309,16 +309,16 @@ bool DoClean(CommandLine &)
}
pkgAcquire Fetcher;
- if (archivedir.empty() == false && FileExists(archivedir) == true)
+ if (archivedir.empty() == false && FileExists(archivedir) == true &&
+ Fetcher.GetLock(archivedir) == true)
{
- Fetcher.GetLock(archivedir);
Fetcher.Clean(archivedir);
Fetcher.Clean(archivedir + "partial/");
}
- if (listsdir.empty() == false && FileExists(listsdir) == true)
+ if (listsdir.empty() == false && FileExists(listsdir) == true &&
+ Fetcher.GetLock(listsdir) == true)
{
- Fetcher.GetLock(listsdir);
Fetcher.Clean(listsdir + "partial/");
}
diff --git a/test/integration/test-apt-get-clean b/test/integration/test-apt-get-clean
index 9d15cd826..6bf20c8d7 100755
--- a/test/integration/test-apt-get-clean
+++ b/test/integration/test-apt-get-clean
@@ -36,6 +36,16 @@ testfailure test -e rootdir/var/cache/apt/archives/foo_2_all.deb
testfailure test -e rootdir/var/cache/apt/archives/foo_3_all.deb
testfailure test -e rootdir/var/cache/apt/archives/foo_4_all.deb
+if [ "$(id -u)" != '0' ]; then
+ msgmsg 'No clean if lock can not be acquired'
+ touch rootdir/var/cache/apt/archives/foo_4_all.deb
+ touch rootdir/var/cache/apt/archives/lock
+ chmod 444 rootdir/var/cache/apt/archives/lock
+ testfailure apt clean
+ testsuccess test -e rootdir/var/cache/apt/archives/foo_4_all.deb
+ chmod 644 rootdir/var/cache/apt/archives/lock
+fi
+
directorygone() {
rm -rf "$1"
testsuccess apt autoclean