tests/test-parseindex2.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Mon, 03 May 2021 18:19:16 +0200
changeset 47260 130c9f7ed914
parent 47157 47ffc754989a
child 47267 2b69555e4875
permissions -rw-r--r--
revlog: add a "data compression mode" entry in the index tuple That will make it possible to keep track of compression information in the revlog index, opening the way to more efficient revision restoration (in native code, but the python usage is already defeating performance work). We start with adding a new entry to the index tuple, using a value matching the current behavior. We will introduce storage and other value in later changesets. Differential Revision: https://phab.mercurial-scm.org/D10646
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
     1
"""This unit test primarily tests parsers.parse_index2().
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
     2
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
     3
It also checks certain aspects of the parsers module as a whole.
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
     4
"""
20166
7eda5bb9ec8f parsers: clarify documentation of test-parseindex2.py
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20159
diff changeset
     5
28754
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
     6
from __future__ import absolute_import, print_function
28841
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
     7
45848
e7a4c018b563 tests: use python from environment in test-parseindex2.py
Martin von Zweigbergk <martinvonz@google.com>
parents: 43952
diff changeset
     8
import os
28841
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
     9
import struct
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
    10
import subprocess
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
    11
import sys
39027
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38891
diff changeset
    12
import unittest
28841
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
    13
28753
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
    14
from mercurial.node import (
46114
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45848
diff changeset
    15
    bin,
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45848
diff changeset
    16
    hex,
28753
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
    17
    nullrev,
47055
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46717
diff changeset
    18
    sha1nodeconstants,
28753
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
    19
)
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 28841
diff changeset
    20
from mercurial import (
32411
df448de7cf3b parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 29205
diff changeset
    21
    policy,
38128
3de58f50afa2 tests: fix test-parseindex2 on Python 3
Augie Fackler <augie@google.com>
parents: 37938
diff changeset
    22
    pycompat,
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 28841
diff changeset
    23
)
47260
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
    24
from mercurial.revlogutils import (
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
    25
    constants,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
    26
)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    27
43554
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    28
parsers = policy.importmod('parsers')
32411
df448de7cf3b parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 29205
diff changeset
    29
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    30
# original python implementation
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    31
def gettype(q):
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    32
    return int(q & 0xFFFF)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    33
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
    34
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    35
def offset_type(offset, type):
37938
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    36
    return int(int(offset) << 16 | type)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    37
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
    38
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    39
indexformatng = ">Qiiiiii20s12x"
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    40
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
    41
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
    42
def py_parseindex(data, inline):
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    43
    s = 64
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    44
    cache = None
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    45
    index = []
47055
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46717
diff changeset
    46
    nodemap = {sha1nodeconstants.nullid: nullrev}
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    47
    n = off = 0
13253
61c9bc3da402 revlog: remove lazy index
Matt Mackall <mpm@selenic.com>
parents: 8117
diff changeset
    48
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    49
    l = len(data) - s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    50
    append = index.append
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    51
    if inline:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    52
        cache = (0, data)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    53
        while off <= l:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
    54
            e = struct.unpack(indexformatng, data[off : off + s])
47260
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
    55
            e = e + (0, 0, constants.COMP_MODE_INLINE)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    56
            nodemap[e[7]] = n
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    57
            append(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    58
            n += 1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    59
            if e[1] < 0:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    60
                break
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    61
            off += e[1] + s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    62
    else:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    63
        while off <= l:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
    64
            e = struct.unpack(indexformatng, data[off : off + s])
47260
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
    65
            e = e + (0, 0, constants.COMP_MODE_INLINE)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    66
            nodemap[e[7]] = n
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    67
            append(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    68
            n += 1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    69
            off += s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    70
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    71
    e = list(index[0])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    72
    type = gettype(e[0])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    73
    e[0] = offset_type(0, type)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    74
    index[0] = tuple(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    75
13254
5ef5eb1f3515 revlog: only build the nodemap on demand
Matt Mackall <mpm@selenic.com>
parents: 13253
diff changeset
    76
    return index, cache
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
    77
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
    78
37937
b4e42a9bd12e tests: prefer string concatenation with () instead of \ in parseindex2 tests
Augie Fackler <augie@google.com>
parents: 32411
diff changeset
    79
data_inlined = (
37938
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    80
    b'\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x01\x8c'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    81
    b'\x00\x00\x04\x07\x00\x00\x00\x00\x00\x00\x15\x15\xff\xff\xff'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    82
    b'\xff\xff\xff\xff\xff\xebG\x97\xb7\x1fB\x04\xcf\x13V\x81\tw\x1b'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    83
    b'w\xdduR\xda\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    84
    b'x\x9c\x9d\x93?O\xc30\x10\xc5\xf7|\x8a\xdb\x9a\xa8m\x06\xd8*\x95'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    85
    b'\x81B\xa1\xa2\xa2R\xcb\x86Pd\x9a\x0b5$vd_\x04\xfd\xf6\x9c\xff@'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    86
    b'\x11!\x0b\xd9\xec\xf7\xbbw\xe7gG6\xad6\x04\xdaN\xc0\x92\xa0$)'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    87
    b'\xb1\x82\xa2\xd1%\x16\xa4\x8b7\xa9\xca\xd4-\xb2Y\x02\xfc\xc9'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    88
    b'\xcaS\xf9\xaeX\xed\xb6\xd77Q\x02\x83\xd4\x19\xf5--Y\xea\xe1W'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    89
    b'\xab\xed\x10\xceR\x0f_\xdf\xdf\r\xe1,\xf5\xf0\xcb\xf5 \xceR\x0f'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    90
    b'_\xdc\x0e\x0e\xc3R\x0f_\xae\x96\x9b!\x9e\xa5\x1e\xbf\xdb,\x06'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    91
    b'\xc7q\x9a/\x88\x82\xc3B\xea\xb5\xb4TJ\x93\xb6\x82\x0e\xe16\xe6'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    92
    b'KQ\xdb\xaf\xecG\xa3\xd1 \x01\xd3\x0b_^\xe8\xaa\xa0\xae\xad\xd1'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    93
    b'&\xbef\x1bz\x08\xb0|\xc9Xz\x06\xf6Z\x91\x90J\xaa\x17\x90\xaa'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    94
    b'\xd2\xa6\x11$5C\xcf\xba#\xa0\x03\x02*2\x92-\xfc\xb1\x94\xdf\xe2'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    95
    b'\xae\xb8\'m\x8ey0^\x85\xd3\x82\xb4\xf0`:\x9c\x00\x8a\xfd\x01'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    96
    b'\xb0\xc6\x86\x8b\xdd\xae\x80\xf3\xa9\x9fd\x16\n\x00R%\x1a\x06'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    97
    b'\xe9\xd8b\x98\x1d\xf4\xf3+\x9bf\x01\xd8p\x1b\xf3.\xed\x9f^g\xc3'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    98
    b'^\xd9W81T\xdb\xd5\x04sx|\xf2\xeb\xd6`%?x\xed"\x831\xbf\xf3\xdc'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
    99
    b'b\xeb%gaY\xe1\xad\x9f\xb9f\'1w\xa9\xa5a\x83s\x82J\xb98\xbc4\x8b'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   100
    b'\x83\x00\x9f$z\xb8#\xa5\xb1\xdf\x98\xd9\xec\x1b\x89O\xe3Ts\x9a4'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   101
    b'\x17m\x8b\xfc\x8f\xa5\x95\x9a\xfc\xfa\xed,\xe5|\xa1\xfe\x15\xb9'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   102
    b'\xbc\xb2\x93\x1f\xf2\x95\xff\xdf,\x1a\xc5\xe7\x17*\x93Oz:>\x0e'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   103
)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   104
37937
b4e42a9bd12e tests: prefer string concatenation with () instead of \ in parseindex2 tests
Augie Fackler <augie@google.com>
parents: 32411
diff changeset
   105
data_non_inlined = (
37938
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   106
    b'\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01D\x19'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   107
    b'\x00\x07e\x12\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   108
    b'\xff\xff\xff\xff\xd1\xf4\xbb\xb0\xbe\xfc\x13\xbd\x8c\xd3\x9d'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   109
    b'\x0f\xcd\xd9;\x8c\x07\x8cJ/\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   110
    b'\x00\x00\x00\x00\x00\x00\x01D\x19\x00\x00\x00\x00\x00\xdf\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   111
    b'\x00\x01q\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\xff'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   112
    b'\xff\xff\xff\xc1\x12\xb9\x04\x96\xa4Z1t\x91\xdfsJ\x90\xf0\x9bh'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   113
    b'\x07l&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   114
    b'\x00\x01D\xf8\x00\x00\x00\x00\x01\x1b\x00\x00\x01\xb8\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   115
    b'\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\xff\xff\xff\xff\x02\n'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   116
    b'\x0e\xc6&\xa1\x92\xae6\x0b\x02i\xfe-\xe5\xbao\x05\xd1\xe7\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   117
    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01F'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   118
    b'\x13\x00\x00\x00\x00\x01\xec\x00\x00\x03\x06\x00\x00\x00\x01'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   119
    b'\x00\x00\x00\x03\x00\x00\x00\x02\xff\xff\xff\xff\x12\xcb\xeby1'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   120
    b'\xb6\r\x98B\xcb\x07\xbd`\x8f\x92\xd9\xc4\x84\xbdK\x00\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37937
diff changeset
   121
    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   122
)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   123
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   124
46717
913485776542 revlog: introduce v2 format
Raphaël Gomès <rgomes@octobus.net>
parents: 46114
diff changeset
   125
def parse_index2(data, inline, revlogv2=False):
913485776542 revlog: introduce v2 format
Raphaël Gomès <rgomes@octobus.net>
parents: 46114
diff changeset
   126
    index, chunkcache = parsers.parse_index2(data, inline, revlogv2=revlogv2)
16363
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
   127
    return list(index), chunkcache
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   128
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   129
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   130
def importparsers(hexversion):
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   131
    """Import mercurial.parsers with the given sys.hexversion."""
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   132
    # The file parsers.c inspects sys.hexversion to determine the version
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   133
    # of the currently-running Python interpreter, so we monkey-patch
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   134
    # sys.hexversion to simulate using different versions.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   135
    code = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   136
        "import sys; sys.hexversion=%s; "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   137
        "import mercurial.cext.parsers" % hexversion
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   138
    )
45848
e7a4c018b563 tests: use python from environment in test-parseindex2.py
Martin von Zweigbergk <martinvonz@google.com>
parents: 43952
diff changeset
   139
    cmd = "\"%s\" -c \"%s\"" % (os.environ['PYTHON'], code)
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   140
    # We need to do these tests inside a subprocess because parser.c's
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   141
    # version-checking code happens inside the module init function, and
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   142
    # when using reload() to reimport an extension module, "The init function
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   143
    # of extension modules is not called a second time"
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   144
    # (from http://docs.python.org/2/library/functions.html?#reload).
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   145
    p = subprocess.Popen(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   146
        cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   147
    )
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   148
    return p.communicate()  # returns stdout, stderr
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   149
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   150
39082
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   151
def hexfailmsg(testnumber, hexversion, stdout, expected):
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   152
    try:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   153
        hexstring = hex(hexversion)
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   154
    except TypeError:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   155
        hexstring = None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   156
    return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   157
        "FAILED: version test #%s with Python %s and patched "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   158
        "sys.hexversion %r (%r):\n Expected %s but got:\n-->'%s'\n"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   159
        % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   160
            testnumber,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   161
            sys.version_info,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   162
            hexversion,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   163
            hexstring,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   164
            expected,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   165
            stdout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   166
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   167
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   168
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   169
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   170
def makehex(major, minor, micro):
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   171
    return int("%x%02x%02x00" % (major, minor, micro), 16)
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   172
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   173
39027
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38891
diff changeset
   174
class parseindex2tests(unittest.TestCase):
39082
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   175
    def assertversionokay(self, testnumber, hexversion):
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   176
        stdout, stderr = importparsers(hexversion)
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   177
        self.assertFalse(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   178
            stdout, hexfailmsg(testnumber, hexversion, stdout, 'no stdout')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   179
        )
39082
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   180
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   181
    def assertversionfail(self, testnumber, hexversion):
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   182
        stdout, stderr = importparsers(hexversion)
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   183
        # We include versionerrortext to distinguish from other ImportErrors.
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   184
        errtext = b"ImportError: %s" % pycompat.sysbytes(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   185
            parsers.versionerrortext
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   186
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   187
        self.assertIn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   188
            errtext,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   189
            stdout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   190
            hexfailmsg(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   191
                testnumber,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   192
                hexversion,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   193
                stdout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   194
                expected="stdout to contain %r" % errtext,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   195
            ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   196
        )
39082
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   197
39028
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   198
    def testversiondetection(self):
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   199
        """Check the version-detection logic when importing parsers."""
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   200
        # Only test the version-detection logic if it is present.
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   201
        try:
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   202
            parsers.versionerrortext
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   203
        except AttributeError:
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   204
            return
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   205
        info = sys.version_info
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   206
        major, minor, micro = info[0], info[1], info[2]
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   207
        # Test same major-minor versions.
39082
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   208
        self.assertversionokay(1, makehex(major, minor, micro))
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   209
        self.assertversionokay(2, makehex(major, minor, micro + 1))
39028
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   210
        # Test different major-minor versions.
39082
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   211
        self.assertversionfail(3, makehex(major + 1, minor, micro))
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   212
        self.assertversionfail(4, makehex(major, minor + 1, micro))
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 39031
diff changeset
   213
        self.assertversionfail(5, "'foo'")
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
   214
39028
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   215
    def testbadargs(self):
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   216
        # Check that parse_index2() raises TypeError on bad arguments.
39029
22216c4607bb tests: move chunks of test-parseindex2.py to use unittest properly
Augie Fackler <augie@google.com>
parents: 39028
diff changeset
   217
        with self.assertRaises(TypeError):
39028
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   218
            parse_index2(0, True)
20109
e57c532c3835 parse_index2: fix crash on bad argument type (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 16620
diff changeset
   219
39028
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   220
    def testparseindexfile(self):
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   221
        # Check parsers.parse_index2() on an index file against the
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   222
        # original Python implementation of parseindex, both with and
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   223
        # without inlined data.
20166
7eda5bb9ec8f parsers: clarify documentation of test-parseindex2.py
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20159
diff changeset
   224
39031
ee0720e82257 tests: rename variables in revlog index parse test for clarity
Augie Fackler <augie@google.com>
parents: 39030
diff changeset
   225
        want = py_parseindex(data_inlined, True)
ee0720e82257 tests: rename variables in revlog index parse test for clarity
Augie Fackler <augie@google.com>
parents: 39030
diff changeset
   226
        got = parse_index2(data_inlined, True)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   227
        self.assertEqual(want, got)  # inline data
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   228
39031
ee0720e82257 tests: rename variables in revlog index parse test for clarity
Augie Fackler <augie@google.com>
parents: 39030
diff changeset
   229
        want = py_parseindex(data_non_inlined, False)
ee0720e82257 tests: rename variables in revlog index parse test for clarity
Augie Fackler <augie@google.com>
parents: 39030
diff changeset
   230
        got = parse_index2(data_non_inlined, False)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   231
        self.assertEqual(want, got)  # no inline data
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
   232
39028
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   233
        ix = parsers.parse_index2(data_inlined, True)[0]
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   234
        for i, r in enumerate(ix):
47055
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46717
diff changeset
   235
            if r[7] == sha1nodeconstants.nullid:
39028
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   236
                i = -1
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   237
            try:
39029
22216c4607bb tests: move chunks of test-parseindex2.py to use unittest properly
Augie Fackler <augie@google.com>
parents: 39028
diff changeset
   238
                self.assertEqual(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   239
                    ix[r[7]],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   240
                    i,
46114
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45848
diff changeset
   241
                    'Reverse lookup inconsistent for %r' % hex(r[7]),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   242
                )
39028
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   243
            except TypeError:
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   244
                # pure version doesn't support this
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39027
diff changeset
   245
                break
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16363
diff changeset
   246
39104
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39085
diff changeset
   247
    def testminusone(self):
47260
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   248
        want = (
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   249
            0,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   250
            0,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   251
            0,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   252
            -1,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   253
            -1,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   254
            -1,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   255
            -1,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   256
            sha1nodeconstants.nullid,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   257
            0,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   258
            0,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   259
            constants.COMP_MODE_INLINE,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   260
        )
39104
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39085
diff changeset
   261
        index, junk = parsers.parse_index2(data_inlined, True)
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39085
diff changeset
   262
        got = index[-1]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   263
        self.assertEqual(want, got)  # inline data
39104
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39085
diff changeset
   264
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39085
diff changeset
   265
        index, junk = parsers.parse_index2(data_non_inlined, False)
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39085
diff changeset
   266
        got = index[-1]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   267
        self.assertEqual(want, got)  # no inline data
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   268
43865
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   269
    def testdelitemwithoutnodetree(self):
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   270
        index, _junk = parsers.parse_index2(data_non_inlined, False)
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   271
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   272
        def hexrev(rev):
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   273
            if rev == nullrev:
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   274
                return b'\xff\xff\xff\xff'
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   275
            else:
46114
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45848
diff changeset
   276
                return bin('%08x' % rev)
43865
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   277
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   278
        def appendrev(p1, p2=nullrev):
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   279
            # node won't matter for this test, let's just make sure
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   280
            # they don't collide. Other data don't matter either.
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   281
            node = hexrev(p1) + hexrev(p2) + b'.' * 12
47260
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   282
            e = (
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   283
                0,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   284
                0,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   285
                12,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   286
                1,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   287
                34,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   288
                p1,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   289
                p2,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   290
                node,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   291
                0,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   292
                0,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   293
                constants.COMP_MODE_INLINE,
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   294
            )
130c9f7ed914 revlog: add a "data compression mode" entry in the index tuple
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47157
diff changeset
   295
            index.append(e)
43865
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   296
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   297
        appendrev(4)
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   298
        appendrev(5)
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   299
        appendrev(6)
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   300
        self.assertEqual(len(index), 7)
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   301
43952
ac627ed8a911 tests-pure: fixing test-parseindex2
Georges Racinet <georges.racinet@octobus.net>
parents: 43865
diff changeset
   302
        del index[1:-1]
43865
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   303
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   304
        # assertions that failed before correction
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   305
        self.assertEqual(len(index), 1)  # was 4
43952
ac627ed8a911 tests-pure: fixing test-parseindex2
Georges Racinet <georges.racinet@octobus.net>
parents: 43865
diff changeset
   306
        headrevs = getattr(index, 'headrevs', None)
ac627ed8a911 tests-pure: fixing test-parseindex2
Georges Racinet <georges.racinet@octobus.net>
parents: 43865
diff changeset
   307
        if headrevs is not None:  # not implemented in pure
ac627ed8a911 tests-pure: fixing test-parseindex2
Georges Racinet <georges.racinet@octobus.net>
parents: 43865
diff changeset
   308
            self.assertEqual(index.headrevs(), [0])  # gave ValueError
43865
49fa0b31ee1d cext-revlog: fixed __delitem__ for uninitialized nodetree
Georges Racinet <georges.racinet@octobus.net>
parents: 43554
diff changeset
   309
39104
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39085
diff changeset
   310
39027
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38891
diff changeset
   311
if __name__ == '__main__':
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38891
diff changeset
   312
    import silenttestrunner
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39104
diff changeset
   313
39027
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38891
diff changeset
   314
    silenttestrunner.main(__name__)