annotate tests/svnxml.py @ 18944:a9c443b3b240

unionrepo: read-only operations on a union of two localrepos unionrepo is just like bundlerepo without bundles. The implementation is very similar to bundlerepo, but I don't see any obvious way to generalize it. Some most obvious use cases for this would be log and diff across local repos, as a kind of preview of pulls, for instance: $ hg -R union:repo1+repo2 heads $ hg -R union:repo1+repo2 log -r REPO1REV -r REPO2REV $ hg -R union:repo1+repo2 log -r '::REPO1REV-::REPO2REV' $ hg -R union:repo1+repo2 log -r 'ancestor(REPO1REV,REPO2REV)' $ hg -R union:repo1+repo2 diff -r REPO1REV -r REPO2REV This is going to be used in RhodeCode, and Bitbucket already uses something similar. Having a core implementation would be beneficial.
author Mads Kiilerich <madski@unity3d.com>
date Fri, 18 Jan 2013 15:54:09 +0100
parents c58bdecdb800
children 812eb3b7dc43
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.
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
4 import xml.dom.minidom, sys
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
5
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
6 def xmltext(e):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
7 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
8 in e.childNodes
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
9 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
10
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
11 def parseentry(entry):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
12 e = {}
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
13 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
14 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
15 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
16 e['paths'] = []
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
17 paths = entry.getElementsByTagName('paths')
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
18 if paths:
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
19 paths = paths[0]
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
20 for p in paths.getElementsByTagName('path'):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
21 action = p.getAttribute('action')
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
22 path = xmltext(p)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
23 frompath = p.getAttribute('copyfrom-path')
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
24 fromrev = p.getAttribute('copyfrom-rev')
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
25 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
26 return e
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
27
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
28 def parselog(data):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
29 entries = []
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
30 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
31 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
32 entries.append(parseentry(e))
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
33 return entries
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
34
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
35 def printentries(entries):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
36 fp = sys.stdout
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
37 for e in entries:
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
38 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
39 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
40 for path, action, fpath, frev in sorted(e['paths']):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
41 frominfo = ''
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
42 if frev:
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
43 frominfo = ' (from %s@%s)' % (fpath, frev)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
44 p = ' %s %s%s\n' % (action, path, frominfo)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
45 fp.write(p.encode('utf-8'))
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
46
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
47 if __name__ == '__main__':
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
48 data = sys.stdin.read()
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
49 entries = parselog(data)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
50 printentries(entries)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
51