summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/acquire-item.cc29
-rwxr-xr-xtest/integration/test-pdiff-usage6
2 files changed, 27 insertions, 8 deletions
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index b73c4985f..446551cc2 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -2103,22 +2103,35 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/
// clean the plate
{
+ std::string const Final = GetExistingFilename(CurrentPackagesFile);
+ if (unlikely(Final.empty())) // because we wouldn't be called in such a case
+ return false;
std::string const PartialFile = GetPartialFileNameFromURI(Target.URI);
- std::vector<std::string> exts = APT::Configuration::getCompressorExtensions();
- for (auto const &ext : exts)
+ if (FileExists(PartialFile) && RemoveFile("Bootstrap-linking", PartialFile) == false)
+ {
+ if (Debug)
+ std::clog << "Bootstrap-linking for patching " << CurrentPackagesFile
+ << " by removing stale " << PartialFile << " failed!" << std::endl;
+ return false;
+ }
+ for (auto const &ext : APT::Configuration::getCompressorExtensions())
{
std::string const Partial = PartialFile + ext;
- if (FileExists(Partial))
- RemoveFile("PDiffs-Bootstrap", Partial);
+ if (FileExists(Partial) && RemoveFile("Bootstrap-linking", Partial) == false)
+ {
+ if (Debug)
+ std::clog << "Bootstrap-linking for patching " << CurrentPackagesFile
+ << " by removing stale " << Partial << " failed!" << std::endl;
+ return false;
+ }
}
- std::string const Final = GetExistingFilename(CurrentPackagesFile);
- if (unlikely(Final.empty())) // because we wouldn't be called in such a case
- return false;
std::string const Ext = Final.substr(CurrentPackagesFile.length());
std::string const Partial = PartialFile + Ext;
if (symlink(Final.c_str(), Partial.c_str()) != 0)
{
- std::clog << "Bootstrap-linking for patching " << CurrentPackagesFile << " by linking " << Final << " to " << Partial << " failed!" << std::endl;
+ if (Debug)
+ std::clog << "Bootstrap-linking for patching " << CurrentPackagesFile
+ << " by linking " << Final << " to " << Partial << " failed!" << std::endl;
return false;
}
}
diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage
index bf7779e40..253abb92c 100755
--- a/test/integration/test-pdiff-usage
+++ b/test/integration/test-pdiff-usage
@@ -60,6 +60,9 @@ testrun() {
" aptcache show apt oldstuff
configcompression '.' 'gz'
+ # see if the code deals properly with leftover partial files
+ touch rootdir/var/lib/apt/lists-bak/partial/localhost:${APTHTTPPORT}_Packages
+
msgmsg "Testcase: apply with one patch: $*"
find aptarchive -name 'Packages*' -type f -delete
cp "${PKGFILE}-new" aptarchive/Packages
@@ -208,6 +211,9 @@ SHA256-Download:
msgmsg "Testcase: pdiff patch bigger than index itself: $*"
rm -rf rootdir/var/lib/apt/lists
cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
+ # the general testcode checks for leftovers in partial, but as this file
+ # is never touched in this test as it exits earlier its not a leftover…
+ rm -f rootdir/var/lib/apt/lists/partial/localhost:${APTHTTPPORT}_Packages
cp "${PKGFILE}-new" aptarchive/Packages
compressfile 'aptarchive/Packages'
mkdir -p aptarchive/Packages.diff