##// END OF EJS Templates
narrow: fix flaky behavior described in issue6150...
narrow: fix flaky behavior described in issue6150 This has been plaguing the CI for a good while, and it doesn't appear to have an easy fix proposed yet. The solution in this change is to always do an unambiguous (but expensive) lookup in case of comparison. This should always be correct, albeit suboptimal. Differential Revision: https://phab.mercurial-scm.org/D10034

File last commit:

r46819:3dc886e6 default
r47280:b994db7c stable
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)