Add get_rpmver_in_repo() for rpmversion
authorZhang Qiang <qiang.z.zhang@intel.com>
Tue, 27 Dec 2011 07:29:35 +0000 (15:29 +0800)
committerJF Ding <jian-feng.ding@intel.com>
Sat, 31 Dec 2011 07:16:30 +0000 (15:16 +0800)
mic/conf.py
mic/utils/misc.py

index 3de46de..083f518 100644 (file)
@@ -42,6 +42,7 @@ class ConfigMgr(object):
                     "release": None,
                     "logfile": None,
                     "record_pkgs": [],
+                    "rpmver": None,
                     "compress_disk_image": None,
                     "name_prefix": None,
                     "proxy": None,
@@ -176,6 +177,8 @@ class ConfigMgr(object):
                                                     self.create['cachedir'])
         msger.raw(" DONE")
 
+        self.create['rpmver'] = misc.get_rpmver_in_repo(self.create['repomd'])
+
         target_archlist, archlist = misc.get_arch(self.create['repomd'])
         if self.create['arch']:
             if self.create['arch'] not in archlist:
index f5d8659..d4599a2 100644 (file)
@@ -360,6 +360,35 @@ def get_metadata_from_repos(repostrs, cachedir):
 
     return my_repo_metadata
 
+def get_rpmver_in_repo(repometadata):
+    for repo in repometadata:
+        if repo["primary"].endswith(".xml"):
+            root = xmlparse(repo["primary"])
+            ns = root.getroot().tag
+            ns = ns[0:ns.rindex("}")+1]
+
+            versionlist = []
+            for elm in root.getiterator("%spackage" % ns):
+                if elm.find("%sname" % ns).text == 'rpm':
+                    for node in elm.getchildren():
+                        if node.tag == "%sversion" % ns:
+                            versionlist.append(node.attrib['ver'])
+
+            if versionlist:
+                return reversed(
+                         sorted(
+                           versionlist,
+                           key = lambda ver: map(int, ver.split('.')))).next()
+
+        elif repo["primary"].endswith(".sqlite"):
+            con = sqlite.connect(repo["primary"])
+            for row in con.execute("select version from packages where "
+                                   "name=\"rpm\" ORDER by version DESC"):
+                con.close()
+                return row[0]
+
+    return None
+
 def get_arch(repometadata):
     archlist = []
     for repo in repometadata: