Mercurial > public > mercurial-scm > hg-stable
diff tests/svnxml.py @ 16512:c58bdecdb800 stable
test-convert-svn-sink: add helper to smooth svn xml output
svnxml.py parses "svn log --xml" output and prints the attributes shared among
all tested svn versions. This fixes the test with svn 1.7.
Tested with svn 1.6.12 and 1.7.4.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Tue, 24 Apr 2012 13:05:38 +0200 |
parents | |
children | 812eb3b7dc43 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svnxml.py Tue Apr 24 13:05:38 2012 +0200 @@ -0,0 +1,51 @@ +# Read the output of a "svn log --xml" command on stdin, parse it and +# print a subset of attributes common to all svn versions tested by +# hg. +import xml.dom.minidom, sys + +def xmltext(e): + return ''.join(c.data for c + in e.childNodes + if c.nodeType == c.TEXT_NODE) + +def parseentry(entry): + e = {} + e['revision'] = entry.getAttribute('revision') + e['author'] = xmltext(entry.getElementsByTagName('author')[0]) + e['msg'] = xmltext(entry.getElementsByTagName('msg')[0]) + e['paths'] = [] + paths = entry.getElementsByTagName('paths') + if paths: + paths = paths[0] + for p in paths.getElementsByTagName('path'): + action = p.getAttribute('action') + path = xmltext(p) + frompath = p.getAttribute('copyfrom-path') + fromrev = p.getAttribute('copyfrom-rev') + e['paths'].append((path, action, frompath, fromrev)) + return e + +def parselog(data): + entries = [] + doc = xml.dom.minidom.parseString(data) + for e in doc.getElementsByTagName('logentry'): + entries.append(parseentry(e)) + return entries + +def printentries(entries): + fp = sys.stdout + for e in entries: + for k in ('revision', 'author', 'msg'): + fp.write(('%s: %s\n' % (k, e[k])).encode('utf-8')) + for path, action, fpath, frev in sorted(e['paths']): + frominfo = '' + if frev: + frominfo = ' (from %s@%s)' % (fpath, frev) + p = ' %s %s%s\n' % (action, path, frominfo) + fp.write(p.encode('utf-8')) + +if __name__ == '__main__': + data = sys.stdin.read() + entries = parselog(data) + printentries(entries) +