diff options
author | David Kalnischkies <david@kalnischkies.de> | 2017-01-19 03:57:45 +0100 |
---|---|---|
committer | Julian Andres Klode <jak@debian.org> | 2017-02-22 18:11:44 +0100 |
commit | 7012a9b530109b68d7b27ff4b43968e8ac6d109d (patch) | |
tree | 027ca9d07a69c368ae1063007bab983e6874bac5 | |
parent | 9a1ec661147e6c2580a889e6f53d9c7a8bf73b69 (diff) |
remove 'old' FAILED files in the next acquire call
If apt renames a file to .FAILED it leaves its namespace and is never
touched again – expect since 1.1~exp4 in which "apt clean" will remove
those files. The usefulness of these files rapidly degrades if you don't
keep the update log itself (together with debug output in the best case)
through and on 99% of all system they will be kept around forever just
to collect dust over time and eat up space.
With this commit an update call will remove all FAILED files of previous
runs, so that the FAILED files you have on disk are always only the ones
related to the last apt run stopping apt from hoarding files.
Closes: 846476
(cherry picked from commit 7ca83492e802967f183babf06ab541b1b51f1703)
(cherry picked from commit c8540403ed35fa36e1610fd90aeae8f66c126fdb)
-rw-r--r-- | apt-pkg/acquire.cc | 6 | ||||
-rwxr-xr-x | test/integration/test-apt-update-expected-size | 4 |
2 files changed, 10 insertions, 0 deletions
diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index 145cbd56d..f2b80a5be 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -117,6 +117,12 @@ static bool SetupAPTPartialDirectory(std::string const &grand, std::string const if (chmod(partial.c_str(), 0700) != 0) _error->WarningE("SetupAPTPartialDirectory", "chmod 0700 of directory %s failed", partial.c_str()); + _error->PushToStack(); + // remove 'old' FAILED files to stop us from collecting them for no reason + for (auto const &Failed: GetListOfFilesInDir(partial, "FAILED", false, false)) + RemoveFile("SetupAPTPartialDirectory", Failed); + _error->RevertToStack(); + return true; } bool pkgAcquire::Setup(pkgAcquireStatus *Progress, string const &Lock) diff --git a/test/integration/test-apt-update-expected-size b/test/integration/test-apt-update-expected-size index 4981e72c3..faf3a8612 100755 --- a/test/integration/test-apt-update-expected-size +++ b/test/integration/test-apt-update-expected-size @@ -23,6 +23,7 @@ test_inreleasetoobig() { rm -f update.output # ensure the failed InRelease file got renamed testsuccess ls rootdir/var/lib/apt/lists/partial/*InRelease.FAILED + testfailure test -e rootdir/var/lib/apt/lists/partial/Old.FAILED } test_packagestoobig() { @@ -38,6 +39,8 @@ test_packagestoobig() { NEW_SIZE="$(stat --printf=%s aptarchive/dists/unstable/main/binary-i386/Packages)" testfailuremsg "E: Failed to fetch ${1}/dists/unstable/main/binary-i386/Packages Writing more data than expected ($NEW_SIZE > $SIZE) E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::Transaction=0 + testsuccess ls rootdir/var/lib/apt/lists/partial/*Packages*.FAILED + testfailure test -e rootdir/var/lib/apt/lists/partial/Old.FAILED } methodtest() { @@ -49,6 +52,7 @@ methodtest() { rm -rf rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists.good # normal update works fine testsuccess aptget update + touch rootdir/var/lib/apt/lists/partial/Old.FAILED mv rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists.good # starting fresh works |