diff options
-rw-r--r-- | apt-pkg/acquire-item.cc | 29 | ||||
-rwxr-xr-x | test/integration/test-pdiff-usage | 6 |
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 |