- add xml utility functions for common operations
authorPanu Matilainen <pmatilai@turre.koti.laiskiainen.org>
Tue, 6 Mar 2007 21:39:01 +0000 (23:39 +0200)
committerPanu Matilainen <pmatilai@turre.koti.laiskiainen.org>
Tue, 6 Mar 2007 21:39:01 +0000 (23:39 +0200)
- convert RPMRepomdHandler to use them instead of private FindTag etc methods

apt-pkg/Makefile.am
apt-pkg/Makefile.in
apt-pkg/rpm/rpmhandler.cc
apt-pkg/rpm/rpmhandler.h
apt-pkg/rpm/xmlutil.cc [new file with mode: 0644]
apt-pkg/rpm/xmlutil.h [new file with mode: 0644]

index d73a9e2..2d1b3d7 100644 (file)
@@ -65,6 +65,8 @@ libapt_pkg_la_SOURCES = \
        rpm/rpmsystem.h \
        rpm/rpmversion.cc \
        rpm/rpmversion.h \
+       rpm/xmlutil.cc \
+       rpm/xmlutil.h \
        acquire.cc \
        acquire.h \
        acquire-item.cc \
index 256e25e..ec84f66 100644 (file)
@@ -74,12 +74,13 @@ am_libapt_pkg_la_OBJECTS = contrib/cdromutl.lo contrib/cmndline.lo \
        rpm/rpmcallback.lo rpm/rpmhandler.lo rpm/rpmindexfile.lo \
        rpm/rpmlistparser.lo rpm/rpmpackagedata.lo rpm/rpmpm.lo \
        rpm/rpmrecords.lo rpm/rpmsrcrecords.lo rpm/rpmsystem.lo \
-       rpm/rpmversion.lo acquire.lo acquire-item.lo acquire-method.lo \
-       acquire-worker.lo algorithms.lo cachefile.lo clean.lo \
-       depcache.lo indexfile.lo init.lo luaiface.lo orderlist.lo \
-       packagemanager.lo pkgcache.lo pkgcachegen.lo pkgrecords.lo \
-       pkgsystem.lo policy.lo repository.lo sourcelist.lo \
-       srcrecords.lo tagfile.lo version.lo versionmatch.lo
+       rpm/rpmversion.lo rpm/xmlutil.lo acquire.lo acquire-item.lo \
+       acquire-method.lo acquire-worker.lo algorithms.lo cachefile.lo \
+       clean.lo depcache.lo indexfile.lo init.lo luaiface.lo \
+       orderlist.lo packagemanager.lo pkgcache.lo pkgcachegen.lo \
+       pkgrecords.lo pkgsystem.lo policy.lo repository.lo \
+       sourcelist.lo srcrecords.lo tagfile.lo version.lo \
+       versionmatch.lo
 libapt_pkg_la_OBJECTS = $(am_libapt_pkg_la_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include/apt-pkg
 depcomp = $(SHELL) $(top_srcdir)/buildlib/depcomp
@@ -302,6 +303,8 @@ libapt_pkg_la_SOURCES = \
        rpm/rpmsystem.h \
        rpm/rpmversion.cc \
        rpm/rpmversion.h \
+       rpm/xmlutil.cc \
+       rpm/xmlutil.h \
        acquire.cc \
        acquire.h \
        acquire-item.cc \
@@ -488,6 +491,7 @@ rpm/rpmsrcrecords.lo: rpm/$(am__dirstamp) \
        rpm/$(DEPDIR)/$(am__dirstamp)
 rpm/rpmsystem.lo: rpm/$(am__dirstamp) rpm/$(DEPDIR)/$(am__dirstamp)
 rpm/rpmversion.lo: rpm/$(am__dirstamp) rpm/$(DEPDIR)/$(am__dirstamp)
+rpm/xmlutil.lo: rpm/$(am__dirstamp) rpm/$(DEPDIR)/$(am__dirstamp)
 libapt-pkg.la: $(libapt_pkg_la_OBJECTS) $(libapt_pkg_la_DEPENDENCIES) 
        $(CXXLINK) -rpath $(libdir) $(libapt_pkg_la_LDFLAGS) $(libapt_pkg_la_OBJECTS) $(libapt_pkg_la_LIBADD) $(LIBS)
 
@@ -541,6 +545,8 @@ mostlyclean-compile:
        -rm -f rpm/rpmsystem.lo
        -rm -f rpm/rpmversion.$(OBJEXT)
        -rm -f rpm/rpmversion.lo
+       -rm -f rpm/xmlutil.$(OBJEXT)
+       -rm -f rpm/xmlutil.lo
 
 distclean-compile:
        -rm -f *.tab.c
@@ -593,6 +599,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@rpm/$(DEPDIR)/rpmsrcrecords.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@rpm/$(DEPDIR)/rpmsystem.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@rpm/$(DEPDIR)/rpmversion.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@rpm/$(DEPDIR)/xmlutil.Plo@am__quote@
 
 .cc.o:
 @am__fastdepCXX_TRUE@  depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \
index 8c063e1..95e225f 100644 (file)
@@ -33,6 +33,7 @@
 #include <libxml/xmlreader.h>
 #include <sstream>
 #include <apt-pkg/sqlite.h>
+#include "xmlutil.h"
 #endif
 
 #include <apti18n.h>
@@ -1019,82 +1020,60 @@ void RPMRepomdHandler::Rewind()
    PkgIter = Pkgs.begin();
 }
 
-xmlNode *RPMRepomdHandler::FindNode(const string Name)
+string RPMRepomdHandler::Name() 
 {
-   for (xmlNode *n = NodeP->children; n; n = n->next) {
-      if (xmlStrcmp(n->name, (xmlChar*)Name.c_str()) == 0) {
-         return n;
-      }
-   }
-   return NULL;
+   return XmlFindNodeContent(NodeP, "name");
 }
 
-xmlNode *RPMRepomdHandler::FindNode(xmlNode *Node, const string Name)
+string RPMRepomdHandler::Arch() 
 {
-   for (xmlNode *n = Node->children; n; n = n->next) {
-      if (xmlStrcmp(n->name, (xmlChar*)Name.c_str()) == 0) {
-         return n;
-      }
-   }
-   return NULL;
+   return XmlFindNodeContent(NodeP, "arch");
 }
 
-string RPMRepomdHandler::FindTag(xmlNode *Node, string Tag)
+string RPMRepomdHandler::Packager() 
 {
-   xmlNode *n = FindNode(Node, Tag);
-   string str = "";
-   if (n) {
-      xmlChar *content = xmlNodeGetContent(n);
-      if (content) {
-        str = (char*)content;
-        xmlFree(content);
-      }
-   }
-   return str;
+   return XmlFindNodeContent(NodeP, "packager");
 }
 
-string RPMRepomdHandler::GetProp(xmlNode *Node, char *Prop)
+string RPMRepomdHandler::Summary() 
 {
-   string str = "";
-   if (Node) {
-      xmlChar *prop = xmlGetProp(Node, (xmlChar*)Prop);
-      if (prop) {
-        str = (char*)prop;
-        xmlFree(prop);
-      }
-   }
-   return str;
+   return XmlFindNodeContent(NodeP, "summary");
+}
+
+string RPMRepomdHandler::Description() 
+{
+   return XmlFindNodeContent(NodeP, "description");
 }
 
 string RPMRepomdHandler::Group()
 {
-   xmlNode *n = FindNode("format");
-   return FindTag(n, "group");
+   xmlNode *n = XmlFindNode(NodeP, "format");
+   return XmlFindNodeContent(n, "group");
 }
 
 string RPMRepomdHandler::Vendor()
 {
-   xmlNode *n = FindNode("format");
-   return FindTag(n, "vendor");
+   xmlNode *n = XmlFindNode(NodeP, "format");
+   return XmlFindNodeContent(n, "vendor");
 }
 
 string RPMRepomdHandler::Release()
 {
-   xmlNode *n = FindNode("version");
-   return GetProp(n, "rel");
+   xmlNode *n = XmlFindNode(NodeP, "version");
+   return XmlGetProp(n, "rel");
 }
 
 string RPMRepomdHandler::Version()
 {
-   xmlNode *n = FindNode("version");
-   return GetProp(n, "ver");
+   xmlNode *n = XmlFindNode(NodeP, "version");
+   return XmlGetProp(n, "ver");
 }
 
 string RPMRepomdHandler::Epoch()
 {
    string epoch;
-   xmlNode *n = FindNode("version");
-   epoch = GetProp(n, "epoch");
+   xmlNode *n = XmlFindNode(NodeP, "version");
+   epoch = XmlGetProp(n, "epoch");
    // XXX createrepo stomps epoch zero on packages without epoch, hide
    // them. Rpm treats zero and empty equally anyway so it doesn't matter.
    if (epoch == "0")
@@ -1106,7 +1085,7 @@ string RPMRepomdHandler::FileName()
 {
    xmlNode *n;
    string str = "";
-   if ((n = FindNode("location"))) {
+   if ((n = XmlFindNode(NodeP, "location"))) {
       xmlChar *prop = xmlGetProp(n, (xmlChar*)"href");
       str = basename((char*)prop);
       xmlFree(prop);
@@ -1118,7 +1097,7 @@ string RPMRepomdHandler::Directory()
 {
    xmlNode *n;
    string str = "";
-   if ((n = FindNode("location"))) {
+   if ((n = XmlFindNode(NodeP, "location"))) {
       xmlChar *prop = xmlGetProp(n, (xmlChar*)"href");
       if (prop) {
         str = dirname((char*)prop);
@@ -1139,7 +1118,7 @@ string RPMRepomdHandler::SHA1Sum()
 {
    xmlNode *n;
    string str = "";
-   if ((n = FindNode("checksum"))) {
+   if ((n = XmlFindNode(NodeP, "checksum"))) {
       xmlChar *content = xmlNodeGetContent(n);
       str = (char*)content;
       xmlFree(content);
@@ -1151,7 +1130,7 @@ off_t RPMRepomdHandler::FileSize()
 {
    xmlNode *n;
    off_t size = 0;
-   if ((n = FindNode("size"))) {
+   if ((n = XmlFindNode(NodeP, "size"))) {
       xmlChar *prop = xmlGetProp(n, (xmlChar*)"package");
       size = atol((char*)prop);
       xmlFree(prop);
@@ -1163,7 +1142,7 @@ off_t RPMRepomdHandler::InstalledSize()
 {
    xmlNode *n;
    off_t size = 0;
-   if ((n = FindNode("size"))) {
+   if ((n = XmlFindNode(NodeP, "size"))) {
       xmlChar *prop = xmlGetProp(n, (xmlChar*)"installed");
       size = atol((char*)prop);
       xmlFree(prop);
@@ -1173,27 +1152,27 @@ off_t RPMRepomdHandler::InstalledSize()
 
 string RPMRepomdHandler::SourceRpm()
 {
-   xmlNode *n = FindNode("format");
-   return FindTag(n, "sourcerpm");
+   xmlNode *n = XmlFindNode(NodeP, "format");
+   return XmlFindNodeContent(n, "sourcerpm");
 }
 
 bool RPMRepomdHandler::PRCO(unsigned int Type, vector<Dependency*> &Deps)
 {
-   xmlNode *format = FindNode("format");
+   xmlNode *format = XmlFindNode(NodeP, "format");
    xmlNode *prco = NULL;
 
    switch (Type) {
       case pkgCache::Dep::Depends:
-         prco = FindNode(format, "requires");
+         prco = XmlFindNode(format, "requires");
          break;
       case pkgCache::Dep::Conflicts:
-         prco = FindNode(format, "conflicts");
+         prco = XmlFindNode(format, "conflicts");
          break;
       case pkgCache::Dep::Obsoletes:
-         prco = FindNode(format, "obsoletes");
+         prco = XmlFindNode(format, "obsoletes");
          break;
       case pkgCache::Dep::Provides:
-         prco = FindNode(format, "provides");
+         prco = XmlFindNode(format, "provides");
          break;
    }
 
@@ -1281,7 +1260,7 @@ bool RPMRepomdHandler::HasFile(const char *File)
 
 bool RPMRepomdHandler::ShortFileList(vector<string> &FileList)
 {
-   xmlNode *format = FindNode("format");
+   xmlNode *format = XmlFindNode(NodeP, "format");
    for (xmlNode *n = format->children; n; n = n->next) {
       if (xmlStrcmp(n->name, (xmlChar*)"file") != 0)  continue;
       xmlChar *Filename = xmlNodeGetContent(n);
index 073acf5..c289915 100644 (file)
@@ -280,12 +280,6 @@ class RPMRepomdHandler : public RPMHandler
    string FilelistPath;
    string OtherPath;
 
-   xmlNode *FindNode(const string Name);
-   xmlNode *FindNode(xmlNode *Node, const string Name);
-
-   string FindTag(xmlNode *Node, const string Tag);
-   string GetProp(xmlNode *Node, char *Prop);
-
    public:
 
 
@@ -301,17 +295,17 @@ class RPMRepomdHandler : public RPMHandler
    virtual string MD5Sum();
    virtual string SHA1Sum();
 
-   virtual string Name() {return FindTag(NodeP, "name");};
-   virtual string Arch() {return FindTag(NodeP, "arch");};
+   virtual string Name();
+   virtual string Arch();
    virtual string Epoch();
    virtual string Version();
    virtual string Release();
 
    virtual string Group();
-   virtual string Packager() {return FindTag(NodeP, "packager");};
+   virtual string Packager();
    virtual string Vendor();
-   virtual string Summary() {return FindTag(NodeP, "summary");};
-   virtual string Description() {return FindTag(NodeP, "description");};
+   virtual string Summary();
+   virtual string Description();
    virtual string SourceRpm();
 
    virtual bool HasFile(const char *File);
diff --git a/apt-pkg/rpm/xmlutil.cc b/apt-pkg/rpm/xmlutil.cc
new file mode 100644 (file)
index 0000000..6542ab1
--- /dev/null
@@ -0,0 +1,50 @@
+
+#include "xmlutil.h"
+#include <string>
+
+#ifdef APT_WITH_REPOMD
+xmlNode *XmlFindNode(xmlNode *Node, const string Name)
+{
+   for (xmlNode *n = Node->children; n; n = n->next) {
+      if (xmlStrcmp(n->name, (xmlChar*)Name.c_str()) == 0) {
+         return n;
+      }
+   }
+   return NULL;
+}
+
+string XmlFindNodeContent(xmlNode *Node, string Name)
+{
+   xmlNode *n = XmlFindNode(Node, Name);
+   return XmlGetContent(n);
+}
+
+string XmlGetContent(xmlNode *Node)
+{
+   string str = "";
+   if (Node) {
+      xmlChar *content = xmlNodeGetContent(Node);
+      if (content) {
+         str = (char*)content;
+         xmlFree(content);
+      }
+   }
+   return str;
+}
+
+string XmlGetProp(xmlNode *Node, string Prop)
+{
+   string str = "";
+   if (Node) {
+      xmlChar *prop = xmlGetProp(Node, (xmlChar*)Prop.c_str());
+      if (prop) {
+         str = (char*)prop;
+         xmlFree(prop);
+      }
+   }
+   return str;
+}
+
+#endif
+
+// vim:sts=3:sw=3
diff --git a/apt-pkg/rpm/xmlutil.h b/apt-pkg/rpm/xmlutil.h
new file mode 100644 (file)
index 0000000..819105e
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef XMLUTIL_H
+#define XMLUTIL_H
+
+#include <apt-pkg/aptconf.h>
+
+#ifdef APT_WITH_REPOMD
+#include <string>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+using std::string;
+
+xmlNode *XmlFindNode(xmlNode *Node, const string Name);
+string XmlFindNodeContent(xmlNode *Node, string Name);
+string XmlGetContent(xmlNode *Node);
+string XmlGetProp(xmlNode *Node, string Prop);
+#endif
+
+#endif
+
+// vim:sts=3:sw=3