diff --git a/dmd.py b/dmd.py
index 684bac6..b8e1f2d 100755
--- a/dmd.py
+++ b/dmd.py
@@ -51,7 +51,7 @@ class MdType(object):

         return pkgelem

-    def diff_trees(self, oldtree, newtree):
+    def diff_trees(self, oldtree, newtree, fo):
         oldpkgs = oldtree.getroot().getchildren()
         newpkgs = newtree.getroot().getchildren()

@@ -62,15 +62,18 @@ class MdType(object):
                 nsmap = {None : self.ns,
                          "rpm" : "http://linux.duke.edu/metadata/rpm";,
                          "delta" : "http://linux.duke.edu/metadata/delta"})
-        additions = Element("delta:additions")
+        additions = Element(self.deltasns + "additions")
         diff.append(additions)
-        removals = Element("delta:removals")
-
+        removals = Element(self.deltasns + "removals")
         diff.append(removals)

+        lastpkg = ""
         for pkgid, pkg in newpkgshash.iteritems():
             if not oldpkgshash.has_key(pkgid):
                 additions.append(pkg)
+                pkg.set("after", lastpkg)
+            lastpkg = self.get_pkg_id(pkg)
+

         for pkgid, pkg in oldpkgshash.iteritems():
             if not newpkgshash.has_key(pkgid):
@@ -79,9 +82,10 @@ class MdType(object):

         diff.set("packages", str(len(removals) + len(additions)))

-        print tostring(diff, pretty_print=True)
+        fo.write(tostring(diff, pretty_print=True))
+        fo.close()

-    def patch_tree(self, oldtree, deltatree):
+    def patch_tree(self, oldtree, deltatree, fo):
         oldroot = oldtree.getroot()
         oldpkgs = oldroot.getchildren()

@@ -95,19 +99,35 @@ class MdType(object):
             if oldpkgshash.has_key(pkgid):
                 print >> sys.stderr, "Package %s already exists" % pkgid
                 sys.exit(1)
-            oldroot.append(pkg)
+            afterid = pkg.get('after')
+            if afterid == "":
+                oldpkgs.insert(0, pkg)
+            else:
+                index = oldpkgs.index(oldpkgshash[afterid])
+                oldpkgs.insert(index+1, pkg)
+            oldpkgshash[pkgid] = pkg

         for pkg in removals:
             pkgid = pkg.get('pkgid')
             if not oldpkgshash.has_key(pkgid):
                 print >> sys.stderr, "Package %s does not exist" % pkgid
                 sys.exit(1)
-            oldroot.remove(oldpkgshash[pkgid])
+            oldpkgs.remove(oldpkgshash[pkgid])

         oldcount = int(oldroot.get('packages'))
         newcount = oldcount + len(additions) - len(removals)
-        oldroot.set('packages', str(newcount))
-        print tostring(oldtree, pretty_print=True)
+
+        fo.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+        fo.write('<metadata xmlns="http://linux.duke.edu/metadata/common";' \
+            ' xmlns:rpm="http://linux.duke.edu/metadata/rpm"; packages="%s">\n'
+            % newcount)
+        for pkg in oldpkgs:
+            lines = tostring(pkg, pretty_print=True).strip().split('\n')
+            lines = lines[1:]
+            fo.write('<package type="rpm">\n')
+            fo.write('%s\n' % ('\n').join(lines))
+        fo.write('</metadata>')
+        fo.close()


 class OtherMdType(MdType):
@@ -133,11 +153,11 @@ mdtypeinfo = {


 def usage(progname):
-    print "usage: %s [diff|patch] MDTYPE FILE1 FILE2" % progname
+    print "usage: %s [diff|patch] MDTYPE FILE1 FILE2 OUTFILE" % progname
     sys.exit()

 def main(args):
-    if len(args) != 5:
+    if len(args) != 6:
         usage(args[0])
     if args[1] not in ('diff', 'patch'):
         usage(args[0])
@@ -146,11 +166,12 @@ def main(args):

     oldtree = parse(args[3])
     newtree = parse(args[4])
+    fo = open (args[5], 'w')

     if args[1] == 'diff':
-        mdtypeinfo[args[2]].diff_trees(oldtree, newtree)
+        mdtypeinfo[args[2]].diff_trees(oldtree, newtree, fo)
     else:
-        mdtypeinfo[args[2]].patch_tree(oldtree, newtree)
+        mdtypeinfo[args[2]].patch_tree(oldtree, newtree, fo)

 if __name__ == "__main__":
     main(sys.argv)
_______________________________________________
Yum-devel mailing list
Yum-devel@lists.baseurl.org
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to