Просмотр исходного кода

avoid deb specific code in private-install

Michael Vogt лет назад: 12
Родитель
Сommit
eafc543587
2 измененных файлов с 34 добавлено и 7 удалено
  1. 20 0
      apt-pkg/deb/debmetaindex.cc
  2. 14 7
      apt-private/private-install.cc

+ 20 - 0
apt-pkg/deb/debmetaindex.cc

@@ -516,5 +516,25 @@ class debSLTypeDebSrc : public debSLTypeDebian
    }   
 };
 
+class debSLTypeDebFile : public pkgSourceList::Type
+{
+   public:
+
+   bool CreateItem(vector<metaIndex *> &List, string const &URI,
+		   string const &Dist, string const &Section,
+		   std::map<string, string> const &Options) const
+   {
+      metaIndex *mi = new debDebFileMetaIndex(URI);
+      List.push_back(mi);
+      return true;
+   }
+   
+   debSLTypeDebFile()
+   {
+      Name = "deb-file";
+      Label = "Debian Deb File";
+   }   
+};
 debSLTypeDeb _apt_DebType;
 debSLTypeDebSrc _apt_DebSrcType;
+debSLTypeDebFile _apt_DebFileType;

+ 14 - 7
apt-private/private-install.cc

@@ -21,9 +21,6 @@
 #include <apt-pkg/pkgcache.h>
 #include <apt-pkg/sourcelist.h>
 
-// FIXME: include of deb specific header
-#include <apt-pkg/debmetaindex.h>
-
 #include <errno.h>
 #include <stdlib.h>
 #include <string.h>
@@ -33,6 +30,7 @@
 #include <iostream>
 #include <set>
 #include <vector>
+#include <map>
 
 #include <apt-private/acqprogress.h>
 #include <apt-private/private-install.h>
@@ -678,10 +676,19 @@ bool DoInstall(CommandLine &CmdL)
    {
       if(FileExists(*I))
       {
-         // FIMXE: direct usage of .deb specific stuff
-         metaIndex *mi = new debDebFileMetaIndex(*I);
-         pkgSourceList *sources = Cache.GetSourceList();
-         sources->Add(mi);
+         // FIXME: make this more elegant
+         std::string TypeStr = flExtension(*I) + "-file";
+         pkgSourceList::Type *Type = pkgSourceList::Type::GetType(TypeStr.c_str());
+         if(Type != 0)
+         {
+            std::vector<metaIndex *> List;
+            std::map<std::string, std::string> Options;
+            if(Type->CreateItem(List, *I, "", "", Options))
+            {
+               pkgSourceList *sources = Cache.GetSourceList();
+               sources->Add(List[0]);
+            }
+         }
       }
    }