annotate tests/svnxml.py @ 41754:d5edb5d3a337

copies: filter out copies when target is not in destination manifest When chaining a series of commits that copied a file with a series that removed the destination file, we would still include the copy in the result. Similar to the previous patch, I have checked that `hg status --copies` is not affected by this bug, but I wouldn't be surprised if some commands are. Differential Revision: https://phab.mercurial-scm.org/D5989
author Martin von Zweigbergk <martinvonz@google.com>
date Thu, 14 Feb 2019 22:46:18 -0800
parents 7c54357be2ae
children 2372284d9457
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
1 # Read the output of a "svn log --xml" command on stdin, parse it and
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
2 # print a subset of attributes common to all svn versions tested by
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
3 # hg.
28947
812eb3b7dc43 py3: use absolute_import in svnxml.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 16512
diff changeset
4 from __future__ import absolute_import
812eb3b7dc43 py3: use absolute_import in svnxml.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 16512
diff changeset
5 import sys
812eb3b7dc43 py3: use absolute_import in svnxml.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 16512
diff changeset
6 import xml.dom.minidom
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
7
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
8 def xmltext(e):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
9 return ''.join(c.data for c
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
10 in e.childNodes
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
11 if c.nodeType == c.TEXT_NODE)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
12
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
13 def parseentry(entry):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
14 e = {}
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
15 e['revision'] = entry.getAttribute('revision')
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
16 e['author'] = xmltext(entry.getElementsByTagName('author')[0])
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
17 e['msg'] = xmltext(entry.getElementsByTagName('msg')[0])
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
18 e['paths'] = []
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
19 paths = entry.getElementsByTagName('paths')
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
20 if paths:
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
21 paths = paths[0]
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
22 for p in paths.getElementsByTagName('path'):
41326
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
23 action = p.getAttribute('action').encode('utf-8')
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
24 path = xmltext(p).encode('utf-8')
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
25 frompath = p.getAttribute('copyfrom-path').encode('utf-8')
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
26 fromrev = p.getAttribute('copyfrom-rev').encode('utf-8')
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
27 e['paths'].append((path, action, frompath, fromrev))
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
28 return e
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
29
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
30 def parselog(data):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
31 entries = []
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
32 doc = xml.dom.minidom.parseString(data)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
33 for e in doc.getElementsByTagName('logentry'):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
34 entries.append(parseentry(e))
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
35 return entries
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
36
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
37 def printentries(entries):
40216
c17d73bf6a4d py3: use sys.stdout.buffer for binary output in tests/svnxml.py
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 28947
diff changeset
38 try:
c17d73bf6a4d py3: use sys.stdout.buffer for binary output in tests/svnxml.py
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 28947
diff changeset
39 fp = sys.stdout.buffer
c17d73bf6a4d py3: use sys.stdout.buffer for binary output in tests/svnxml.py
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 28947
diff changeset
40 except AttributeError:
c17d73bf6a4d py3: use sys.stdout.buffer for binary output in tests/svnxml.py
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 28947
diff changeset
41 fp = sys.stdout
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
42 for e in entries:
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
43 for k in ('revision', 'author', 'msg'):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
44 fp.write(('%s: %s\n' % (k, e[k])).encode('utf-8'))
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
45 for path, action, fpath, frev in sorted(e['paths']):
41326
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
46 frominfo = b''
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
47 if frev:
41326
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
48 frominfo = b' (from %s@%s)' % (fpath, frev)
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
49 p = b' %s %s%s\n' % (action, path, frominfo)
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
50 fp.write(p)
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
51
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
52 if __name__ == '__main__':
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
53 data = sys.stdin.read()
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
54 entries = parselog(data)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
55 printentries(entries)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
56