tests/svnxml.py
author Raphaël Gomès <rgomes@octobus.net>
Mon, 03 Jul 2023 15:28:17 +0200
branchstable
changeset 50735 2eaa883778f7
parent 48966 6000f5b25c9b
permissions -rw-r--r--
heptapod-ci: (hopefully) fix the pipeline savings system There is no easy way for me to test this outside of the actual repo since it would require setting up `heptapod-runner` locally, making a Git repo with the right changes, etc. It's not worth my time at this point. If this fails, I'll try to ask for help from Georges, the maintainer of Heptapod.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
import sys
812eb3b7dc43 py3: use absolute_import in svnxml.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 16512
diff changeset
     5
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
     6
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41351
diff changeset
     7
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
     8
def xmltext(e):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41351
diff changeset
     9
    return ''.join(c.data for c in e.childNodes if c.nodeType == c.TEXT_NODE)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41351
diff changeset
    10
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    11
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    12
def parseentry(entry):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    13
    e = {}
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    14
    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
    15
    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
    16
    e['msg'] = xmltext(entry.getElementsByTagName('msg')[0])
46472
7525e77b5eac convert: option to set date and time for svn commits
Nikita Slyusarev <nslus@yandex-team.com>
parents: 43076
diff changeset
    17
    e['date'] = xmltext(entry.getElementsByTagName('date')[0])
16512
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'):
41351
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
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41351
diff changeset
    30
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    31
def parselog(data):
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    32
    entries = []
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    33
    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
    34
    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
    35
        entries.append(parseentry(e))
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    36
    return entries
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    37
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41351
diff changeset
    38
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    39
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
    40
    try:
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.buffer
c17d73bf6a4d py3: use sys.stdout.buffer for binary output in tests/svnxml.py
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 28947
diff changeset
    42
    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
    43
        fp = sys.stdout
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    44
    for e in entries:
46472
7525e77b5eac convert: option to set date and time for svn commits
Nikita Slyusarev <nslus@yandex-team.com>
parents: 43076
diff changeset
    45
        for k in ('revision', 'author', 'date', 'msg'):
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    46
            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
    47
        for path, action, fpath, frev in sorted(e['paths']):
41351
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
    48
            frominfo = b''
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    49
            if frev:
41351
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
    50
                frominfo = b' (from %s@%s)' % (fpath, frev)
7c54357be2ae tests: normalize XML values to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40216
diff changeset
    51
            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
    52
            fp.write(p)
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    53
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41351
diff changeset
    54
16512
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    55
if __name__ == '__main__':
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    56
    data = sys.stdin.read()
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    57
    entries = parselog(data)
c58bdecdb800 test-convert-svn-sink: add helper to smooth svn xml output
Patrick Mezard <patrick@mezard.eu>
parents:
diff changeset
    58
    printentries(entries)