##// END OF EJS Templates
copies: simplify the conditional for _filter's case 3...
copies: simplify the conditional for _filter's case 3 The conditional is much simpler and the test are actually happier. This clarification of the conditional will also be necessary to properly support tracing more renames in a coming changeset. Differential Revision: https://phab.mercurial-scm.org/D9795

File last commit:

r46819:3dc886e6 default
r47128:1d6d1a15 default
Show More
svnxml.py
58 lines | 1.8 KiB | text/x-python | PythonLexer
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 # 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.
Robert Stanca
py3: use absolute_import in svnxml.py
r28947 from __future__ import absolute_import
import sys
import xml.dom.minidom
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512
Augie Fackler
formatting: blacken the codebase...
r43346
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 def xmltext(e):
Augie Fackler
formatting: blacken the codebase...
r43346 return ''.join(c.data for c in e.childNodes if c.nodeType == c.TEXT_NODE)
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512
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'):
Gregory Szorc
tests: normalize XML values to bytes...
r41357 action = p.getAttribute('action').encode('utf-8')
path = xmltext(p).encode('utf-8')
frompath = p.getAttribute('copyfrom-path').encode('utf-8')
fromrev = p.getAttribute('copyfrom-rev').encode('utf-8')
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 e['paths'].append((path, action, frompath, fromrev))
return e
Augie Fackler
formatting: blacken the codebase...
r43346
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 def parselog(data):
entries = []
doc = xml.dom.minidom.parseString(data)
for e in doc.getElementsByTagName('logentry'):
entries.append(parseentry(e))
return entries
Augie Fackler
formatting: blacken the codebase...
r43346
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 def printentries(entries):
Pulkit Goyal
py3: use sys.stdout.buffer for binary output in tests/svnxml.py...
r40252 try:
fp = sys.stdout.buffer
except AttributeError:
fp = sys.stdout
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 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']):
Gregory Szorc
tests: normalize XML values to bytes...
r41357 frominfo = b''
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 if frev:
Gregory Szorc
tests: normalize XML values to bytes...
r41357 frominfo = b' (from %s@%s)' % (fpath, frev)
p = b' %s %s%s\n' % (action, path, frominfo)
fp.write(p)
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512
Augie Fackler
formatting: blacken the codebase...
r43346
Patrick Mezard
test-convert-svn-sink: add helper to smooth svn xml output...
r16512 if __name__ == '__main__':
data = sys.stdin.read()
entries = parselog(data)
printentries(entries)