Mercurial > hg
view tests/svnxml.py @ 23344:6333412245ec stable
mq: when setting message in plain mode, separate it from header (issue4453)
Fix inconsistent handling of plain header separation in mq patcheader - and
contrary to c87f2a5a6e49, do it in the direction of having an empty line
between header and description. Plain patches are like mails and should thus
have an empty line between headers and body in compliance with RFC 822 3.1.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Sun, 16 Nov 2014 19:57:40 +0100 |
parents | c58bdecdb800 |
children | 812eb3b7dc43 |
line wrap: on
line source
# 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)