- combine depends and provides handling into one PRCO() method in rpmhandler,
authorpmatilai <pmatilai>
Thu, 7 Sep 2006 17:57:51 +0000 (17:57 +0000)
committerpmatilai <pmatilai>
Thu, 7 Sep 2006 17:57:51 +0000 (17:57 +0000)
  more in line with how rpm handles them anyway
- fix callers to use the new method, remove old ones

apt-pkg/pkgcache.h
apt-pkg/rpm/rpmhandler.cc
apt-pkg/rpm/rpmhandler.h
apt-pkg/rpm/rpmlistparser.cc
apt-pkg/rpm/rpmrecords.cc
apt-pkg/rpm/rpmsrcrecords.cc

index 4e1b981..3f8cab9 100644 (file)
@@ -63,7 +63,7 @@ class pkgCache
    struct Dep
    {
       enum DepType {Depends=1,PreDepends=2,Suggests=3,Recommends=4,
-        Conflicts=5,Replaces=6,Obsoletes=7};
+        Conflicts=5,Replaces=6,Obsoletes=7,Provides=8};
       enum DepCompareOp {Or=0x10,NoOp=0,LessEq=0x1,GreaterEq=0x2,Less=0x3,
         Greater=0x4,Equals=0x5,NotEquals=0x6};
    };
@@ -87,7 +87,7 @@ class pkgCache
     * purposes as this will be dropped as soon as SWIG starts
     * supporting nested structures. Use definitions above instead. */
    enum _DepType {DepDepends=1,DepPreDepends=2,DepSuggests=3,DepRecommends=4,
-      DepConflicts=5,DepReplaces=6,DepObsoletes=7};
+      DepConflicts=5,DepReplaces=6,DepObsoletes=7,DepProvides=8};
    enum _DepCompareOp {DepOr=0x10,DepNoOp=0,DepLessEq=0x1,DepGreaterEq=0x2,
       DepLess=0x3,DepGreater=0x4,DepEquals=0x5,DepNotEquals=0x6};
    enum _VerPriority {StateImportant=1,StateRequired=2,StateStandard=3,
index 81eeb1b..799044b 100644 (file)
@@ -253,9 +253,41 @@ bool RPMHandler::InternalDep(const char *name, const char *ver, int_32 flag)
    return false; 
 }
 
+bool RPMHandler::PutDep(const char *name, const char *ver, int_32 flags, 
+                       unsigned int Type, vector<Dependency*> &Deps)
+{
+   if (InternalDep(name, ver, flags) == true) {
+      return true;
+   }
+
+   if (Type == pkgCache::Dep::Depends) {
+      if (flags & RPMSENSE_PREREQ)
+        Type = pkgCache::Dep::PreDepends;
+#if RPM_VERSION >= 0x040403
+      else if (flags & RPMSENSE_MISSINGOK)
+        Type = pkgCache::Dep::Suggests;
+#endif
+      else
+        Type = pkgCache::Dep::Depends;
+   }
+
+   Dependency *Dep = new Dependency;
+   Dep->Name = name;
+   Dep->Version = ver;
+
+   if (HideZeroEpoch && Dep->Version.substr(0, 2) == "0:") {
+      Dep->Version = Dep->Version.substr(2);
+   }
+
+   Dep->Op = DepOp(flags);
+   Dep->Type = Type;
+   Deps.push_back(Dep);
+   return true;
+}
 
+
+bool RPMHandler::PRCO(unsigned int Type, vector<Dependency*> &Deps)
 #if RPM_VERSION >= 0x040100
-bool RPMHandler::Depends(unsigned int Type, vector<Dependency*> &Deps)
 {
    rpmTag deptype = RPMTAG_REQUIRENAME;
    switch (Type) {
@@ -268,6 +300,9 @@ bool RPMHandler::Depends(unsigned int Type, vector<Dependency*> &Deps)
       case pkgCache::Dep::Conflicts:
         deptype = RPMTAG_CONFLICTNAME;
         break;
+      case pkgCache::Dep::Provides:
+        deptype = RPMTAG_PROVIDENAME;
+        break;
 #if RPM_VERSION >= 0x040403
       case pkgCache::Dep::Suggests:
         deptype = RPMTAG_SUGGESTNAME;
@@ -294,7 +329,7 @@ bool RPMHandler::Depends(unsigned int Type, vector<Dependency*> &Deps)
    return true;
 }
 #else
-bool RPMHandler::Depends(unsigned int Type, vector<Dependency*> &Deps)
+bool RPMHandler::PRCO(unsigned int Type, vector<Dependency*> &Deps)
 {
    char **namel = NULL;
    char **verl = NULL;
@@ -321,6 +356,11 @@ bool RPMHandler::Depends(unsigned int Type, vector<Dependency*> &Deps)
         depver = RPMTAG_CONFLICTVERSION;
         depflags = RPMTAG_CONFLICTFLAGS;
         break;
+      case pkgCache::Dep::Provides:
+        deptag = RPMTAG_PROVIDENAME;
+        depver = RPMTAG_PROVIDEVERSION;
+        depflags = RPMTAG_PROVIDEFLAGS;
+        break;
       default:
         /* can't happen... right? */
         return false;
@@ -347,78 +387,6 @@ bool RPMHandler::Depends(unsigned int Type, vector<Dependency*> &Deps)
 }
 #endif
 
-bool RPMHandler::PutDep(const char *name, const char *ver, int_32 flags, 
-                       unsigned int Type, vector<Dependency*> &Deps)
-{
-   if (InternalDep(name, ver, flags) == true) {
-      return true;
-   }
-
-   if (Type == pkgCache::Dep::Depends) {
-      if (flags & RPMSENSE_PREREQ)
-        Type = pkgCache::Dep::PreDepends;
-#if RPM_VERSION >= 0x040403
-      else if (flags & RPMSENSE_MISSINGOK)
-        Type = pkgCache::Dep::Suggests;
-#endif
-      else
-        Type = pkgCache::Dep::Depends;
-   }
-
-   Dependency *Dep = new Dependency;
-   Dep->Name = name;
-   Dep->Version = ver;
-
-   if (HideZeroEpoch && Dep->Version.substr(0, 2) == "0:") {
-      Dep->Version = Dep->Version.substr(2);
-   }
-
-   Dep->Op = DepOp(flags);
-   Dep->Type = Type;
-   Deps.push_back(Dep);
-   return true;
-}
-
-bool RPMHandler::Provides(vector<Dependency*> &Provs)
-{
-   int type, count;
-   char **namel = NULL;
-   char **verl = NULL;
-   void *nameval = NULL;
-   void *verval = NULL;
-   int res;
-
-   res = headerGetEntry(HeaderP, RPMTAG_PROVIDENAME, &type,
-                        (void **)&nameval, &count);
-   if (res != 1)
-       return true;
-   namel = (char **)nameval;
-
-   res = headerGetEntry(HeaderP, RPMTAG_PROVIDEVERSION, &type,
-                        (void **)&verval, NULL);
-   verl = (char **)verval;
-
-   if (res != 1)
-      verl = NULL;
-
-   for (int i = 0; i < count; i++) {
-      Dependency *Dep = new Dependency;
-      Dep->Name = namel[i];
-      if (verl) {
-        Dep->Version = *verl[i] ? verl[i]:"";
-        if (HideZeroEpoch && Dep->Version.substr(0, 2) == "0:") {
-           Dep->Version = Dep->Version.substr(2);
-        }
-        Dep->Op = pkgCache::Dep::Equals;
-      } else {
-        Dep->Version = "";
-      }
-      Provs.push_back(Dep);
-   }
-   return true;
-
-}
-
 // XXX rpmfi originates from somewhere around 2001 but what's the version?
 #if RPM_VERSION >= 0x040100
 bool RPMHandler::FileList(vector<string> &FileList)
@@ -1171,7 +1139,7 @@ string RPMRepomdHandler::SourceRpm()
    return FindTag(n, "sourcerpm");
 }
 
-bool RPMRepomdHandler::Depends(unsigned int Type, vector<Dependency*> &Deps)
+bool RPMRepomdHandler::PRCO(unsigned int Type, vector<Dependency*> &Deps)
 {
    xmlNode *format = FindNode("format");
    xmlNode *dco = NULL;
@@ -1186,6 +1154,9 @@ bool RPMRepomdHandler::Depends(unsigned int Type, vector<Dependency*> &Deps)
       case pkgCache::Dep::Obsoletes:
          dco = FindNode(format, "obsoletes");
          break;
+      case pkgCache::Dep::Provides:
+         dco = FindNode(format, "provides");
+         break;
    }
 
    if (! dco) {
@@ -1248,57 +1219,6 @@ bool RPMRepomdHandler::Depends(unsigned int Type, vector<Dependency*> &Deps)
    return true;
 }
 
-bool RPMRepomdHandler::Provides(vector<Dependency*> &Provs)
-{
-   xmlNode *format = FindNode("format");
-   xmlNode *provides = FindNode(format, "provides");
-
-   if (! provides)
-      return true;
-
-   for (xmlNode *n = provides->children; n; n = n->next) {
-      string depver = "";
-      xmlChar *depname, *flags;
-
-      if (xmlStrcmp(n->name, (xmlChar*)"entry") != 0)  continue;
-
-      Dependency *Dep = new Dependency;
-      if ((depname = xmlGetProp(n, (xmlChar*)"name")) == NULL) continue;
-      Dep->Name = string((char*)depname);
-      xmlFree(depname);
-
-      if ((flags = xmlGetProp(n, (xmlChar*)"flags"))) {
-        xmlFree(flags);
-
-         xmlChar *epoch = xmlGetProp(n, (xmlChar*)"epoch");
-         if (epoch) {
-            depver += string((char*)epoch) + ":";
-           xmlFree(epoch);
-        }
-         xmlChar *ver = xmlGetProp(n, (xmlChar*)"ver");
-         if (ver) {
-            depver += string((char*)ver);
-           xmlFree(ver);
-        }
-         xmlChar *rel = xmlGetProp(n, (xmlChar*)"rel");
-         if (rel) {
-            depver += "-" + string((char*)rel);
-           xmlFree(rel);
-        }
-
-      }
-      Dep->Version = depver;
-      if (HideZeroEpoch && Dep->Version.substr(0, 2) == "0:") {
-        Dep->Version = Dep->Version.substr(2);
-      }
-
-      if (depver.empty() == false)
-        Dep->Op = pkgCache::Dep::Equals;
-      Provs.push_back(Dep);
-   }
-   return true;
-}
-
 bool RPMRepomdHandler::FileList(vector<string> &FileList)
 {
    xmlNode *format = FindNode("format");
index 758c078..2a781b0 100644 (file)
@@ -100,8 +100,7 @@ class RPMHandler
    virtual string SourceRpm() {return GetSTag(RPMTAG_SOURCERPM);};
    virtual bool IsSourceRpm() {return SourceRpm().empty();}
 
-   virtual bool Depends(unsigned int Type, vector<Dependency*> &Deps);
-   virtual bool Provides(vector<Dependency*> &Provs);
+   virtual bool PRCO(unsigned int Type, vector<Dependency*> &Deps);
    virtual bool FileList(vector<string> &FileList);
 
    virtual bool HasFile(const char *File);
@@ -268,8 +267,7 @@ class RPMRepomdHandler : public RPMHandler
    virtual string Description() {return FindTag(NodeP, "description");};
    virtual string SourceRpm();
 
-   virtual bool Depends(unsigned int Type, vector<Dependency*> &Deps);
-   virtual bool Provides(vector<Dependency*> &Provs);
+   virtual bool PRCO(unsigned int Type, vector<Dependency*> &Deps);
    virtual bool FileList(vector<string> &FileList);
 
    RPMRepomdHandler(string File);
@@ -303,7 +301,7 @@ class RPMRepomdFLHandler : public RPMHandler
    virtual string Epoch() {return FindTag("epoch");};
    virtual string Version() {return FindTag("version");};
    virtual string Release() {return FindTag("release");};
-   virtual bool Depends(unsigned int Type, vector<Dependency*> &Deps)
+   virtual bool PRCO(unsigned int Type, vector<Dependency*> &Deps)
        {return true;};
 
    virtual bool FileList(vector<string> &FileList);
index 82494a4..d1eaef3 100644 (file)
@@ -259,7 +259,7 @@ unsigned short rpmListParser::VersionHash()
    
    for (size_t i = 0; i < sizeof(DepSections)/sizeof(int); i++) {
       vector<Dependency*> Deps;
-      if (Handler->Depends(DepSections[i], Deps) == false) continue;
+      if (Handler->PRCO(DepSections[i], Deps) == false) continue;
 
       sort(Deps.begin(), Deps.end(), depsort);
       // rpmdb can give out dupes for scriptlet dependencies, filter them out
@@ -301,7 +301,7 @@ bool rpmListParser::ParseDepends(pkgCache::VerIterator Ver,
 {
    vector<Dependency*> Deps;
 
-   if (Handler->Depends(Type, Deps) == false)
+   if (Handler->PRCO(Type, Deps) == false)
       return false;
    
    for (vector<Dependency*>::iterator I = Deps.begin(); I != Deps.end(); I++) {
@@ -352,7 +352,7 @@ bool rpmListParser::ParseProvides(pkgCache::VerIterator Ver)
 {
    vector<Dependency*> Provs;
 
-   if (Handler->Provides(Provs) == false) {
+   if (Handler->PRCO(pkgCache::Dep::Provides, Provs) == false) {
       return false;
    }
    for (vector<Dependency*>::iterator I = Provs.begin(); I != Provs.end(); I++) {
index 8cc3288..1c7cbd6 100644 (file)
@@ -269,7 +269,7 @@ void rpmRecordParser::GetRec(const char *&Start,const char *&Stop)
    vector<Dependency*>::iterator I;
    bool start = true;
 
-   Handler->Depends(pkgCache::Dep::Depends, Deps);
+   Handler->PRCO(pkgCache::Dep::Depends, Deps);
    for (I = Deps.begin(); I != Deps.end(); I++) {
       if ((*I)->Type != pkgCache::Dep::PreDepends)
         continue;
@@ -295,7 +295,7 @@ void rpmRecordParser::GetRec(const char *&Start,const char *&Stop)
       BufCatDep(*I);
    }
       
-   Handler->Depends(pkgCache::Dep::Conflicts, Conflicts);
+   Handler->PRCO(pkgCache::Dep::Conflicts, Conflicts);
    start = true;
    for (I = Conflicts.begin(); I != Conflicts.end(); I++) {
       if (start) {
@@ -307,7 +307,7 @@ void rpmRecordParser::GetRec(const char *&Start,const char *&Stop)
       BufCatDep(*I);
    }
 
-   Handler->Provides(Provides);
+   Handler->PRCO(pkgCache::Dep::Provides, Provides);
    start = true;
    for (I = Provides.begin(); I != Provides.end(); I++) {
       if (start) {
@@ -319,7 +319,7 @@ void rpmRecordParser::GetRec(const char *&Start,const char *&Stop)
       BufCatDep(*I);
    }
 
-   Handler->Depends(pkgCache::Dep::Obsoletes, Obsoletes);
+   Handler->PRCO(pkgCache::Dep::Obsoletes, Obsoletes);
    start = true;
    for (I = Obsoletes.begin(); I != Obsoletes.end(); I++) {
       if (start) {
index 0d4080f..9ce0849 100644 (file)
@@ -268,7 +268,7 @@ string rpmSrcRecordParser::AsStr()
    vector<Dependency*>::iterator I;
    bool start = true;
 
-   Handler->Depends(pkgCache::Dep::Depends, Deps);
+   Handler->PRCO(pkgCache::Dep::Depends, Deps);
    for (I = Deps.begin(); I != Deps.end(); I++) {
       if ((*I)->Type != pkgCache::Dep::Depends)
         continue;
@@ -282,7 +282,7 @@ string rpmSrcRecordParser::AsStr()
    }
 
    // Doesn't do anything yet, build conflicts aren't recorded yet...
-   Handler->Depends(pkgCache::Dep::Conflicts, Conflicts);
+   Handler->PRCO(pkgCache::Dep::Conflicts, Conflicts);
    start = true;
    for (I = Conflicts.begin(); I != Conflicts.end(); I++) {
       if (start) {
@@ -322,7 +322,7 @@ bool rpmSrcRecordParser::BuildDepends(vector<pkgSrcRecords::Parser::BuildDepRec>
    BuildDeps.clear();
 
    vector<Dependency*> Deps, Conflicts;
-   Handler->Depends(pkgCache::Dep::Depends, Deps);
+   Handler->PRCO(pkgCache::Dep::Depends, Deps);
 
    for (vector<Dependency*>::iterator I = Deps.begin(); I != Deps.end(); I++) {
       rec.Package = (*I)->Name;
@@ -332,7 +332,7 @@ bool rpmSrcRecordParser::BuildDepends(vector<pkgSrcRecords::Parser::BuildDepRec>
       BuildDeps.push_back(rec);
    }
       
-   Handler->Depends(pkgCache::Dep::Conflicts, Conflicts);
+   Handler->PRCO(pkgCache::Dep::Conflicts, Conflicts);
 
    for (vector<Dependency*>::iterator I = Conflicts.begin(); I != Conflicts.end(); I++) {
       rec.Package = (*I)->Name;