mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 17:27:53 +03:00
643070e071
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.
52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
# 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)
|
|
|