]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/sourcelist.cc
fileutl: simple_buffer: Add write() and full() methods
[apt.git] / apt-pkg / sourcelist.cc
index 2100b5d3ccac5731ca7c7868cbe035c9eecf2c82..6773b069fbec507178383ed49a6ec7ca2870278b 100644 (file)
@@ -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,44 @@ 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)           /*{{{*/
+{
+   // Note: FileExists matches directories and links, too!
+   if (File.empty() || FileExists(File) == false)
+      return false;
+
+   std::string const ext = flExtension(File);
+   if (ext == "deb")
+      AddVolatileFile(new debDebPkgFileIndex(File));
+   else if (ext == "dsc")
+      AddVolatileFile(new debDscFileIndex(File));
+   else if (FileExists(flCombine(File, "debian/control")))
+      AddVolatileFile(new debDscFileIndex(flCombine(File, "debian/control")));
+   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] == '.' && I[2] == '/') || 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;
+   });
+}
+                                                                       /*}}}*/