From 14341a7ee1ca3dbcdcdbe10ad19b947ce23d972d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 12 Oct 2015 15:57:53 +0200 Subject: support .deb files in upgrade operations as well The main part is refactoring through to allow hiding the magic needed to support .deb files in deeper layers of libapt so that frontends have less exposure to Debian specific classes like debDebPkgFileIndex. --- apt-pkg/cacheset.cc | 10 ++-------- apt-pkg/sourcelist.cc | 35 ++++++++++++++++++++++++++++++++++- apt-pkg/sourcelist.h | 4 ++++ 3 files changed, 40 insertions(+), 9 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/cacheset.cc b/apt-pkg/cacheset.cc index 5e60ef54a..db34c4a20 100644 --- a/apt-pkg/cacheset.cc +++ b/apt-pkg/cacheset.cc @@ -441,14 +441,6 @@ bool VersionContainerInterface::FromString(VersionContainerInterface * const vci CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper, bool const onlyFromName) { - PackageSet pkgset; - if(FileExists(pkg)) { - helper.PackageFrom(CacheSetHelper::STRING, &pkgset, Cache, pkg); - if(pkgset.empty() == true) - return false; - return VersionContainerInterface::FromPackage(vci, Cache, pkgset.begin(), fallback, helper); - } - std::string ver; bool verIsRel = false; size_t const vertag = pkg.find_last_of("/="); @@ -457,6 +449,8 @@ bool VersionContainerInterface::FromString(VersionContainerInterface * const vci verIsRel = (pkg[vertag] == '/'); pkg.erase(vertag); } + + PackageSet pkgset; if (onlyFromName == false) helper.PackageFrom(CacheSetHelper::STRING, &pkgset, Cache, pkg); else { diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index 2100b5d3c..56df976e8 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -20,6 +21,7 @@ #include #include #include +#include #include #include @@ -536,7 +538,38 @@ std::vector pkgSourceList::GetVolatileFiles() const /*{{{*/ /*}}}*/ void pkgSourceList::AddVolatileFile(pkgIndexFile * const File) /*{{{*/ { - if (File != NULL) + if (File != nullptr) VolatileFiles.push_back(File); } /*}}}*/ +bool pkgSourceList::AddVolatileFile(std::string const &File) /*{{{*/ +{ + if (File.empty() || FileExists(File) == false) + return false; + + if (flExtension(File) == "deb") + AddVolatileFile(new debDebPkgFileIndex(File)); + else + return false; + + return true; +} + /*}}}*/ +void pkgSourceList::AddVolatileFiles(CommandLine &CmdL, std::vector * const VolatileCmdL)/*{{{*/ +{ + std::remove_if(CmdL.FileList + 1, CmdL.FileList + 1 + CmdL.FileSize(), [&](char const * const I) { + if (I != nullptr && (I[0] == '/' || (I[0] == '.' && I[1] == '/'))) + { + if (AddVolatileFile(I)) + { + if (VolatileCmdL != nullptr) + VolatileCmdL->push_back(I); + } + else + _error->Error(_("Unsupported file %s given on commandline"), I); + return true; + } + return false; + }); +} + /*}}}*/ diff --git a/apt-pkg/sourcelist.h b/apt-pkg/sourcelist.h index 47a562d18..9c2d10a46 100644 --- a/apt-pkg/sourcelist.h +++ b/apt-pkg/sourcelist.h @@ -46,6 +46,7 @@ class pkgTagSection; class pkgAcquire; class pkgIndexFile; class metaIndex; +class CommandLine; class pkgSourceList { @@ -129,6 +130,9 @@ class pkgSourceList * @param File is an index file; pointer-ownership is transferred */ void AddVolatileFile(pkgIndexFile * const File); + bool AddVolatileFile(std::string const &File); + void AddVolatileFiles(CommandLine &CmdL, std::vector * const VolatileCmdL); + /** @return list of files registered with #AddVolatileFile */ std::vector GetVolatileFiles() const; -- cgit v1.2.3