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
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel