- implement filelists (and stub for other.xml type) as their own index types
authorPanu Matilainen <pmatilai@laiskiainen.org>
Fri, 17 Nov 2006 22:14:12 +0000 (00:14 +0200)
committerPanu Matilainen <pmatilai@laiskiainen.org>
Fri, 17 Nov 2006 22:14:12 +0000 (00:14 +0200)
apt-pkg/rpm/rpmhandler.cc
apt-pkg/rpm/rpmhandler.h
apt-pkg/rpm/rpmindexfile.cc
apt-pkg/rpm/rpmindexfile.h

index 6c846de..3a726db 100644 (file)
@@ -1238,7 +1238,7 @@ RPMRepomdHandler::~RPMRepomdHandler()
 
 RPMRepomdFLHandler::RPMRepomdFLHandler(string File) : RPMHandler()
 {
-   FilelistFile = File.substr(0, File.size() - 11) + "filelists.xml";
+   FilelistFile = File;
 
    ID = File;
    Filelist = NULL;
@@ -1279,13 +1279,13 @@ error:
 
 bool RPMRepomdFLHandler::Jump(off_t Offset)
 {
-   //cerr << "RepomdFLHandler::Jump() called but not implemented!" << endl;
+   cerr << "RepomdFLHandler::Jump() called but not implemented!" << endl;
    return false;
 }
 
 void RPMRepomdFLHandler::Rewind()
 {
-   //cerr << "RepomdFLHandler::Rewind() called but not implemented!" << endl;
+   cerr << "RepomdFLHandler::Rewind() called but not implemented!" << endl;
 }
 
 bool RPMRepomdFLHandler::Skip()
@@ -1315,15 +1315,15 @@ bool RPMRepomdFLHandler::FileList(vector<string> &FileList)
 
 string RPMRepomdFLHandler::FindTag(char *Tag)
 {
-     string str = "";
-     if (NodeP) {
-         xmlChar *attr = xmlGetProp(NodeP, (xmlChar*)Tag);
-         if (attr) {
-            str = (char*)attr;
-            xmlFree(attr);
-         }
-     }
-     return str;
+   string str = "";
+   if (NodeP) {
+       xmlChar *attr = xmlGetProp(NodeP, (xmlChar*)Tag);
+       if (attr) {
+          str = (char*)attr;
+          xmlFree(attr);
+       }
+   }
+   return str;
 }
 
 RPMRepomdFLHandler::~RPMRepomdFLHandler()
index 13eebb8..abddf6e 100644 (file)
@@ -305,6 +305,12 @@ class RPMRepomdFLHandler : public RPMHandler
    virtual bool PRCO(unsigned int Type, vector<Dependency*> &Deps)
        {return true;};
 
+   virtual string Group() {return "";};
+   virtual string Packager() {return "";};
+   virtual string Vendor() {return "";};
+   virtual string Summary() {return "";};
+   virtual string Description() {return "";};
+   virtual string SourceRpm() {return "";};
    virtual bool FileList(vector<string> &FileList);
    RPMRepomdFLHandler(string File);
    virtual ~RPMRepomdFLHandler();
index cd104b8..63ab9b9 100644 (file)
@@ -655,19 +655,8 @@ bool rpmRepomdIndex::GetReleases(pkgAcquire *Owner) const
 bool rpmRepomdIndex::GetIndexes(pkgAcquire *Owner) const
 {
 
-   new pkgAcqIndex(Owner,Repository,IndexURI("primary"),
-                  Info("primary.xml"), "primary.xml");
-   new pkgAcqIndex(Owner,Repository,IndexURI("filelists"),
-                  Info("filelists.xml"), "filelists.xml");
-   if (_config->FindB("Acquire::ChangeLogs", false)) {
-      new pkgAcqIndex(Owner,Repository,IndexURI("other"),
-                    Info("other.xml"), "other.xml");
-   }
-   string dummy;
-   if (Repository->FindURI("updateinfo", dummy)) {
-      new pkgAcqIndex(Owner,Repository,IndexURI("updateinfo"),
-                    Info("updateinfo.xml"), "updateinfo.xml");
-   }
+   new pkgAcqIndex(Owner,Repository,IndexURI(FileType),
+                  Info(FileType + ".xml"), FileType + ".xml");
    return true;
 }
 
@@ -770,25 +759,6 @@ bool rpmRepomdIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
    return true;
 }
 
-bool rpmRepomdIndex::MergeFileProvides(pkgCacheGenerator &Gen,
-                                       OpProgress &Prog) const
-{
-   string PackageFile = IndexPath();
-   RPMHandler *Handler = new RPMRepomdFLHandler(IndexPath());
-   rpmListParser Parser(Handler);
-   if (_error->PendingError() == true) {
-      delete Handler;
-      return _error->Error(_("Problem opening %s"),PackageFile.c_str());
-   }
-   // We call SubProgress with Size(), since we won't call SelectFile() here.
-   Prog.SubProgress(Size(),Info("pkglist"));
-   if (Gen.MergeFileProvides(Parser) == false)
-      return _error->Error(_("Problem with MergeFileProvides %s"),
-                          PackageFile.c_str());
-   delete Handler;
-   return true;
-}
-
 rpmRepomdIndex::rpmRepomdIndex(string URI,string Dist,string Section, 
                               pkgRepository *Repository):
                               URI(URI), Dist(Dist), Section(Section),
@@ -797,6 +767,7 @@ rpmRepomdIndex::rpmRepomdIndex(string URI,string Dist,string Section,
    if (FileExists(ReleasePath())) {
       Repository->ParseRelease(ReleasePath());
    }
+   FileType = "primary";
 }
 
 pkgSrcRecords::Parser *rpmRepomdIndex::CreateSrcParser() const
@@ -825,6 +796,26 @@ string rpmRepomdSrcIndex::SourceInfo(pkgSrcRecords::Parser const &Record,
       Res += " (" + File.Type + ")";
    return Res;
 }
+
+bool rpmRepomdFileIndex::MergeFileProvides(pkgCacheGenerator &Gen,
+                                       OpProgress &Prog) const
+{
+   string PackageFile = IndexPath();
+   RPMHandler *Handler = new RPMRepomdFLHandler(IndexPath());
+   rpmListParser Parser(Handler);
+   if (_error->PendingError() == true) {
+      delete Handler;
+      return _error->Error(_("Problem opening %s"),PackageFile.c_str());
+   }
+   // We call SubProgress with Size(), since we won't call SelectFile() here.
+   Prog.SubProgress(Size(),Info("pkglist"));
+   if (Gen.MergeFileProvides(Parser) == false)
+      return _error->Error(_("Problem with MergeFileProvides %s"),
+                          PackageFile.c_str());
+   delete Handler;
+   return true;
+}
+
 #endif /* APT_WITH_REPOMD */
 
 // DatabaseIndex::rpmDatabaseIndex - Constructor                       /*{{{*/
@@ -1083,6 +1074,10 @@ class rpmSLTypeRepomd : public rpmSLTypeGen
    {
       pkgRepository *Rep = GetRepository(URI,Dist,Vendor);
       List.push_back(new rpmRepomdPkgIndex(URI,Dist,Section,Rep));
+      List.push_back(new rpmRepomdFileIndex(URI,Dist,Section,Rep));
+#if 0
+      List.push_back(new rpmRepomdOtherIndex(URI,Dist,Section,Rep));
+#endif
       return true;
    };
 
@@ -1154,6 +1149,7 @@ class rpmIFTypeSrc : public pkgIndexFile::Type
    
    rpmIFTypeSrc() {Label = "RPM Source Index";};
 };
+
 class rpmIFTypePkg : public pkgIndexFile::Type
 {
    public:
@@ -1164,6 +1160,7 @@ class rpmIFTypePkg : public pkgIndexFile::Type
    };
    rpmIFTypePkg() {Label = "RPM Package Index";};
 };
+
 class rpmIFTypeDatabase : public pkgIndexFile::Type
 {
    public:
@@ -1174,9 +1171,38 @@ class rpmIFTypeDatabase : public pkgIndexFile::Type
    };
    rpmIFTypeDatabase() {Label = "RPM Database";};
 };
+
+class rpmIFTypeFileList : public pkgIndexFile::Type
+{
+   public:
+
+#if 0
+   virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator File) const
+   {
+      return new rpmFileRecordParser(File.FileName(),*File.Cache());
+   };
+#endif
+   rpmIFTypeFileList() {Label = "RepoMD Filelist";};
+};
+
+class rpmIFTypeOtherList : public pkgIndexFile::Type
+{
+   public:
+
+#if 0
+   virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator File) const
+   {
+      return new rpmFileRecordParser(File.FileName(),*File.Cache());
+   };
+#endif
+   rpmIFTypeOtherList() {Label = "RepoMD Otherlist";};
+};
+
 static rpmIFTypeSrc _apt_Src;
 static rpmIFTypePkg _apt_Pkg;
 static rpmIFTypeDatabase _apt_DB;
+static rpmIFTypeFileList _apt_FL;
+static rpmIFTypeOtherList _apt_OL;
 
 const pkgIndexFile::Type *rpmSrcListIndex::GetType() const
 {
@@ -1215,6 +1241,14 @@ const pkgIndexFile::Type *rpmRepomdSrcIndex::GetType() const
 {
    return &_apt_Src;
 }
+const pkgIndexFile::Type *rpmRepomdFileIndex::GetType() const
+{
+   return &_apt_FL;
+}
+const pkgIndexFile::Type *rpmRepomdOtherIndex::GetType() const
+{
+   return &_apt_OL;
+}
 #endif
 
                                                                        /*}}}*/
index 2879720..e0530f7 100644 (file)
@@ -283,6 +283,8 @@ class rpmRepomdIndex : public rpmIndexFile
 {
    protected:
 
+   string FileType;
+
    string URI;
    string Dist;
    string Section;
@@ -297,14 +299,14 @@ class rpmRepomdIndex : public rpmIndexFile
    string IndexURI(string Type) const;
 
    virtual string MainType() const = 0;
-   virtual string IndexPath() const {return IndexFile("primary");};
+   virtual string IndexPath() const {return IndexFile(FileType);};
    virtual string ReleasePath() const;
 
    public:
 
    // Creates a RPMHandler suitable for usage with this object
    virtual RPMHandler *CreateHandler() const
-          { return new RPMRepomdHandler(IndexFile("primary")); };
+          { return new RPMRepomdHandler(IndexPath()); };
 
    virtual bool GetReleases(pkgAcquire *Owner) const;
 
@@ -321,8 +323,6 @@ class rpmRepomdIndex : public rpmIndexFile
    virtual string ArchiveURI(string File) const;
 
    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
-   virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
-                                 OpProgress &/*Prog*/) const;
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
 
    // Interface for the source record parsers - repomd can have both binary
@@ -371,6 +371,39 @@ class rpmRepomdSrcIndex : public rpmRepomdIndex
           rpmRepomdIndex(URI,Dist,Section,Repository) {};
 
 };
+
+class rpmRepomdFileIndex : public rpmRepomdIndex
+{
+   protected:
+   virtual string MainType() const {return "repomd";};
+
+   public:
+   virtual bool HasPackages() const {return true;};
+   virtual const Type *GetType() const;
+   virtual RPMHandler *CreateHandler() const
+          { return new RPMRepomdFLHandler(IndexPath()); };
+   virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,
+                                 OpProgress &/*Prog*/) const;
+
+   rpmRepomdFileIndex(string URI,string Dist,string Section,
+                     pkgRepository *Repository) :
+          rpmRepomdIndex(URI,Dist,Section,Repository) {FileType="filelists";};
+};
+
+class rpmRepomdOtherIndex : public rpmRepomdIndex
+{
+   protected:
+   virtual string MainType() const {return "repomd";};
+
+   public:
+   virtual const Type *GetType() const;
+   rpmRepomdOtherIndex(string URI,string Dist,string Section,
+                     pkgRepository *Repository) :
+          rpmRepomdIndex(URI,Dist,Section,Repository) {FileType="other";};
+
+};
+
 #endif /* APT_WITH_REPOMD */
 
 #endif
+// vim:sts=3:sw=3