summaryrefslogtreecommitdiff
path: root/apt-pkg/sourcelist.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-10-12 15:57:53 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2015-11-04 18:04:01 +0100
commit14341a7ee1ca3dbcdcdbe10ad19b947ce23d972d (patch)
treeff8d00ce2347061a0ca8f28fc6ff55173c125abc /apt-pkg/sourcelist.cc
parent64b66a46a7fc9e7070ee6a758013a6059fee691e (diff)
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.
Diffstat (limited to 'apt-pkg/sourcelist.cc')
-rw-r--r--apt-pkg/sourcelist.cc35
1 files changed, 34 insertions, 1 deletions
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<config.h>
#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/cmndline.h>
#include <apt-pkg/error.h>
#include <apt-pkg/fileutl.h>
#include <apt-pkg/strutl.h>
@@ -20,6 +21,7 @@
#include <apt-pkg/tagfile.h>
#include <apt-pkg/pkgcache.h>
#include <apt-pkg/cacheiterators.h>
+#include <apt-pkg/debindexfile.h>
#include <ctype.h>
#include <stddef.h>
@@ -536,7 +538,38 @@ std::vector<pkgIndexFile*> 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 char*> * 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;
+ });
+}
+ /*}}}*/