- combine depends and provides handling into one PRCO() method in rpmhandler,
[apt.git] / apt-pkg / rpm / rpmhandler.h
index fe75222..2a781b0 100644 (file)
 #define PKGLIB_RPMHANDLER_H
 
 #include <apt-pkg/fileutl.h>
+
+#ifdef WITH_REPOMD
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 #include <libxml/xmlreader.h>
+#endif
 
 #include <rpm/rpmlib.h>
 #include <rpm/rpmmacro.h>
@@ -45,19 +48,21 @@ struct Dependency
    unsigned int Type;
 };
 
-
 class RPMHandler
 {
    protected:
 
-   unsigned int iOffset;
-   unsigned int iSize;
+   off_t iOffset;
+   off_t iSize;
    Header HeaderP;
    string ID;
 
    string GetSTag(rpmTag Tag);
    unsigned long GetITag(rpmTag Tag);
-
+   unsigned int DepOp(int_32 rpmflags);
+   bool InternalDep(const char *name, const char *ver, int_32 flag);
+   bool PutDep(const char *name, const char *ver, int_32 flags,
+               unsigned int type, vector<Dependency*> &Deps);
 
    public:
 
@@ -66,7 +71,7 @@ class RPMHandler
    virtual string GetID() { return ID; };
 
    virtual bool Skip() = 0;
-   virtual bool Jump(unsigned int Offset) = 0;
+   virtual bool Jump(off_t Offset) = 0;
    virtual void Rewind() = 0;
    inline unsigned Offset() {return iOffset;};
    virtual bool OrderedOffset() {return true;};
@@ -82,7 +87,6 @@ class RPMHandler
 
    virtual string Name() {return GetSTag(RPMTAG_NAME);};
    virtual string Arch() {return GetSTag(RPMTAG_ARCH);};
-   //virtual string Epoch() {return GetSTag(RPMTAG_EPOCH);};
    virtual string Epoch();
    virtual string Version() {return GetSTag(RPMTAG_VERSION);};
    virtual string Release() {return GetSTag(RPMTAG_RELEASE);};
@@ -94,15 +98,13 @@ class RPMHandler
    virtual string Description() {return GetSTag(RPMTAG_DESCRIPTION);};
    virtual unsigned long InstalledSize() {return GetITag(RPMTAG_SIZE);};
    virtual string SourceRpm() {return GetSTag(RPMTAG_SOURCERPM);};
+   virtual bool IsSourceRpm() {return SourceRpm().empty();}
 
-   bool InternalDep(const char *name, const char *ver, int_32 flag);
-   virtual bool Depends(unsigned int Type, vector<Dependency*> &Deps);
-   virtual bool Provides(vector<Dependency*> &Provs);
-   virtual bool FileProvides(vector<string> &FileProvs);
+   virtual bool PRCO(unsigned int Type, vector<Dependency*> &Deps);
+   virtual bool FileList(vector<string> &FileList);
 
    virtual bool HasFile(const char *File);
 
-
    RPMHandler() : iOffset(0), iSize(0), HeaderP(0) {};
    virtual ~RPMHandler() {};
 };
@@ -117,9 +119,10 @@ class RPMFileHandler : public RPMHandler
    public:
 
    virtual bool Skip();
-   virtual bool Jump(unsigned int Offset);
+   virtual bool Jump(off_t Offset);
    virtual void Rewind();
    virtual inline bool IsDatabase() {return false;};
+   virtual bool OrderedOffset() {return true;};
 
    virtual string FileName();
    virtual string Directory();
@@ -140,7 +143,7 @@ class RPMSingleFileHandler : public RPMFileHandler
    public:
 
    virtual bool Skip();
-   virtual bool Jump(unsigned int Offset);
+   virtual bool Jump(off_t Offset);
    virtual void Rewind();
 
    virtual string FileName() {return sFilePath;};
@@ -153,8 +156,6 @@ class RPMSingleFileHandler : public RPMFileHandler
    virtual ~RPMSingleFileHandler() {};
 };
 
-
-
 class RPMDBHandler : public RPMHandler
 {
    protected:
@@ -175,7 +176,7 @@ class RPMDBHandler : public RPMHandler
 
    static string DataPath(bool DirectoryOnly=true);
    virtual bool Skip();
-   virtual bool Jump(unsigned Offset);
+   virtual bool Jump(off_t Offset);
    virtual void Rewind();
    virtual inline bool IsDatabase() {return true;};
    virtual bool HasWriteLock() {return WriteLock;};
@@ -207,7 +208,7 @@ class RPMDirHandler : public RPMHandler
    public:
 
    virtual bool Skip();
-   virtual bool Jump(unsigned int Offset);
+   virtual bool Jump(off_t Offset);
    virtual void Rewind();
    virtual inline bool IsDatabase() {return false;};
 
@@ -219,18 +220,18 @@ class RPMDirHandler : public RPMHandler
    virtual ~RPMDirHandler();
 };
 
+#ifdef WITH_REPOMD
 class RPMRepomdHandler : public RPMHandler
 {
 
    xmlDocPtr Primary;
-   xmlTextReaderPtr Filelist;
    xmlNode *Root;
    xmlNode *NodeP;
 
    vector<xmlNode *> Pkgs;
+   vector<xmlNode *>::iterator PkgIter;
 
-   bool WithFilelist;
-   string PrimaryFile, FilelistFile;
+   string PrimaryFile;
 
    xmlNode *FindNode(const string Name);
    xmlNode *FindNode(xmlNode *Node, const string Name);
@@ -242,7 +243,7 @@ class RPMRepomdHandler : public RPMHandler
 
 
    virtual bool Skip();
-   virtual bool Jump(unsigned int Offset);
+   virtual bool Jump(off_t Offset);
    virtual void Rewind();
    virtual inline bool IsDatabase() {return false;};
 
@@ -266,13 +267,47 @@ class RPMRepomdHandler : public RPMHandler
    virtual string Description() {return FindTag(NodeP, "description");};
    virtual string SourceRpm();
 
-   virtual bool HasFile(const char *File);
-   virtual bool Depends(unsigned int Type, vector<Dependency*> &Deps);
-   virtual bool Provides(vector<Dependency*> &Provs);
-   virtual bool FileProvides(vector<string> &FileProvs);
+   virtual bool PRCO(unsigned int Type, vector<Dependency*> &Deps);
+   virtual bool FileList(vector<string> &FileList);
 
-   RPMRepomdHandler(string File, bool useFilelist);
+   RPMRepomdHandler(string File);
    virtual ~RPMRepomdHandler();
 };
 
+class RPMRepomdFLHandler : public RPMHandler
+{
+   protected:
+   xmlTextReaderPtr Filelist;
+   string FilelistFile;
+   xmlNode *NodeP;
+
+   string FindTag(char *Tag);
+
+   public:
+   virtual bool Skip();
+   virtual bool Jump(off_t Offset);
+   virtual void Rewind();
+   virtual bool IsDatabase() {return false;};
+
+   virtual string FileName() {return FilelistFile;};
+   virtual string Directory() {return "";};
+   virtual unsigned long FileSize() {return 0;};
+   virtual unsigned long InstalledSize() {return 0;};
+   virtual string MD5Sum() {return "";};
+   virtual string SHA1Sum() {return "";};
+
+   virtual string Name() {return FindTag("name");};
+   virtual string Arch() {return FindTag("arch");};
+   virtual string Epoch() {return FindTag("epoch");};
+   virtual string Version() {return FindTag("version");};
+   virtual string Release() {return FindTag("release");};
+   virtual bool PRCO(unsigned int Type, vector<Dependency*> &Deps)
+       {return true;};
+
+   virtual bool FileList(vector<string> &FileList);
+   RPMRepomdFLHandler(string File);
+   virtual ~RPMRepomdFLHandler();
+};
+#endif /* WITH_REPOMD */
+
 #endif