annotate tests/test-parseindex2.py @ 38481:a8872a820242

hgweb: add z-index for search field tooltip On graph page, search field tooltip sometimes goes down to the graph area, where it used to be covered by foreground element of graph entries (.fg) because they have z-index: 10. To prevent the tooltip from being covered, z-index: 15 is enough.
author Anton Shestakov <av6@dwimlabs.net>
date Thu, 28 Jun 2018 07:41:08 +0800
parents 3de58f50afa2
children a3dacabd476b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
8 import struct
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
9 import subprocess
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
10 import sys
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
11
28753
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
12 from mercurial.node import (
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
13 nullid,
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
14 nullrev,
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
15 )
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 28841
diff changeset
16 from mercurial import (
32372
df448de7cf3b parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 29205
diff changeset
17 policy,
38095
3de58f50afa2 tests: fix test-parseindex2 on Python 3
Augie Fackler <augie@google.com>
parents: 37894
diff changeset
18 pycompat,
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 28841
diff changeset
19 )
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
20
32372
df448de7cf3b parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 29205
diff changeset
21 parsers = policy.importmod(r'parsers')
df448de7cf3b parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 29205
diff changeset
22
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
23 # original python implementation
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
24 def gettype(q):
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
25 return int(q & 0xFFFF)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
26
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
27 def offset_type(offset, type):
37894
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
28 return int(int(offset) << 16 | type)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
29
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
30 indexformatng = ">Qiiiiii20s12x"
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
31
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
32 def py_parseindex(data, inline) :
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
33 s = 64
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
34 cache = None
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
35 index = []
27637
b502138f5faa cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents: 20742
diff changeset
36 nodemap = {nullid: nullrev}
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
37 n = off = 0
13253
61c9bc3da402 revlog: remove lazy index
Matt Mackall <mpm@selenic.com>
parents: 8117
diff changeset
38
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
39 l = len(data) - s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
40 append = index.append
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
41 if inline:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
42 cache = (0, data)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
43 while off <= l:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
44 e = struct.unpack(indexformatng, data[off:off + s])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
45 nodemap[e[7]] = n
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
46 append(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
47 n += 1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
48 if e[1] < 0:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
49 break
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
50 off += e[1] + s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
51 else:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
52 while off <= l:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
53 e = struct.unpack(indexformatng, data[off:off + s])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
54 nodemap[e[7]] = n
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
55 append(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
56 n += 1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
57 off += s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
58
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
59 e = list(index[0])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
60 type = gettype(e[0])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
61 e[0] = offset_type(0, type)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
62 index[0] = tuple(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
63
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
64 # add the magic null revision at -1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
65 index.append((0, 0, 0, -1, -1, -1, -1, nullid))
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
66
13254
5ef5eb1f3515 revlog: only build the nodemap on demand
Matt Mackall <mpm@selenic.com>
parents: 13253
diff changeset
67 return index, cache
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
68
37893
b4e42a9bd12e tests: prefer string concatenation with () instead of \ in parseindex2 tests
Augie Fackler <augie@google.com>
parents: 32372
diff changeset
69 data_inlined = (
37894
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
70 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: 37893
diff changeset
71 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: 37893
diff changeset
72 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: 37893
diff changeset
73 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: 37893
diff changeset
74 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: 37893
diff changeset
75 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: 37893
diff changeset
76 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: 37893
diff changeset
77 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: 37893
diff changeset
78 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: 37893
diff changeset
79 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: 37893
diff changeset
80 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: 37893
diff changeset
81 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: 37893
diff changeset
82 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: 37893
diff changeset
83 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: 37893
diff changeset
84 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: 37893
diff changeset
85 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: 37893
diff changeset
86 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: 37893
diff changeset
87 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: 37893
diff changeset
88 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: 37893
diff changeset
89 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: 37893
diff changeset
90 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: 37893
diff changeset
91 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: 37893
diff changeset
92 b'\xbc\xb2\x93\x1f\xf2\x95\xff\xdf,\x1a\xc5\xe7\x17*\x93Oz:>\x0e'
37893
b4e42a9bd12e tests: prefer string concatenation with () instead of \ in parseindex2 tests
Augie Fackler <augie@google.com>
parents: 32372
diff changeset
93 )
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
94
37893
b4e42a9bd12e tests: prefer string concatenation with () instead of \ in parseindex2 tests
Augie Fackler <augie@google.com>
parents: 32372
diff changeset
95 data_non_inlined = (
37894
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
96 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: 37893
diff changeset
97 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: 37893
diff changeset
98 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: 37893
diff changeset
99 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: 37893
diff changeset
100 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: 37893
diff changeset
101 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: 37893
diff changeset
102 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: 37893
diff changeset
103 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: 37893
diff changeset
104 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: 37893
diff changeset
105 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: 37893
diff changeset
106 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: 37893
diff changeset
107 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: 37893
diff changeset
108 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: 37893
diff changeset
109 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: 37893
diff changeset
110 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: 37893
diff changeset
111 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00'
37893
b4e42a9bd12e tests: prefer string concatenation with () instead of \ in parseindex2 tests
Augie Fackler <augie@google.com>
parents: 32372
diff changeset
112 )
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
113
16363
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
114 def parse_index2(data, inline):
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
115 index, chunkcache = parsers.parse_index2(data, inline)
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
116 return list(index), chunkcache
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
117
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
118 def importparsers(hexversion):
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
119 """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
120 # 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
121 # 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
122 # sys.hexversion to simulate using different versions.
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
123 code = ("import sys; sys.hexversion=%s; "
32372
df448de7cf3b parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 29205
diff changeset
124 "import mercurial.cext.parsers" % hexversion)
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
125 cmd = "python -c \"%s\"" % code
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
126 # 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
127 # 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
128 # 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
129 # 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
130 # (from http://docs.python.org/2/library/functions.html?#reload).
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
131 p = subprocess.Popen(cmd, shell=True,
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
132 stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
133 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
134
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
135 def printhexfail(testnumber, hexversion, stdout, expected):
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
136 try:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
137 hexstring = hex(hexversion)
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
138 except TypeError:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
139 hexstring = None
28754
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
140 print("FAILED: version test #%s with Python %s and patched "
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
141 "sys.hexversion %r (%r):\n Expected %s but got:\n-->'%s'\n" %
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
142 (testnumber, sys.version_info, hexversion, hexstring, expected,
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
143 stdout))
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
144
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
145 def testversionokay(testnumber, hexversion):
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
146 stdout, stderr = importparsers(hexversion)
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
147 if stdout:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
148 printhexfail(testnumber, hexversion, stdout, expected="no stdout")
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
149
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
150 def testversionfail(testnumber, hexversion):
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
151 stdout, stderr = importparsers(hexversion)
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
152 # We include versionerrortext to distinguish from other ImportErrors.
38095
3de58f50afa2 tests: fix test-parseindex2 on Python 3
Augie Fackler <augie@google.com>
parents: 37894
diff changeset
153 errtext = b"ImportError: %s" % pycompat.sysbytes(parsers.versionerrortext)
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
154 if errtext not in stdout:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
155 printhexfail(testnumber, hexversion, stdout,
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
156 expected="stdout to contain %r" % errtext)
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
157
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
158 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
159 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
160
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
161 def runversiontests():
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
162 """Check the version-detection logic when importing parsers."""
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
163 info = sys.version_info
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
164 major, minor, micro = info[0], info[1], info[2]
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
165 # Test same major-minor versions.
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
166 testversionokay(1, 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
167 testversionokay(2, makehex(major, minor, micro + 1))
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
168 # Test different major-minor versions.
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
169 testversionfail(3, makehex(major + 1, minor, micro))
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
170 testversionfail(4, makehex(major, minor + 1, micro))
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
171 testversionfail(5, "'foo'")
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
172
16363
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
173 def runtest() :
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
174 # Only test the version-detection logic if it is present.
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
175 try:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
176 parsers.versionerrortext
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
177 except AttributeError:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
178 pass
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
179 else:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
180 runversiontests()
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
181
20109
e57c532c3835 parse_index2: fix crash on bad argument type (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 16620
diff changeset
182 # Check that parse_index2() raises TypeError on bad arguments.
e57c532c3835 parse_index2: fix crash on bad argument type (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 16620
diff changeset
183 try:
e57c532c3835 parse_index2: fix crash on bad argument type (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 16620
diff changeset
184 parse_index2(0, True)
e57c532c3835 parse_index2: fix crash on bad argument type (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 16620
diff changeset
185 except TypeError:
e57c532c3835 parse_index2: fix crash on bad argument type (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 16620
diff changeset
186 pass
e57c532c3835 parse_index2: fix crash on bad argument type (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 16620
diff changeset
187 else:
28754
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
188 print("Expected to get TypeError.")
20109
e57c532c3835 parse_index2: fix crash on bad argument type (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 16620
diff changeset
189
20166
7eda5bb9ec8f parsers: clarify documentation of test-parseindex2.py
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20159
diff changeset
190 # Check parsers.parse_index2() on an index file against the original
7eda5bb9ec8f parsers: clarify documentation of test-parseindex2.py
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20159
diff changeset
191 # Python implementation of parseindex, both with and without inlined data.
7eda5bb9ec8f parsers: clarify documentation of test-parseindex2.py
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20159
diff changeset
192
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
193 py_res_1 = py_parseindex(data_inlined, True)
16363
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
194 c_res_1 = parse_index2(data_inlined, True)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
195
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
196 py_res_2 = py_parseindex(data_non_inlined, False)
16363
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
197 c_res_2 = parse_index2(data_non_inlined, False)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
198
8117
2b30d8488819 remove unnecessary outer parenthesis in if-statements
Martin Geisler <mg@lazybytes.net>
parents: 7110
diff changeset
199 if py_res_1 != c_res_1:
28754
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
200 print("Parse index result (with inlined data) differs!")
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
201
8117
2b30d8488819 remove unnecessary outer parenthesis in if-statements
Martin Geisler <mg@lazybytes.net>
parents: 7110
diff changeset
202 if py_res_2 != c_res_2:
28754
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
203 print("Parse index result (no inlined data) differs!")
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
204
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16363
diff changeset
205 ix = parsers.parse_index2(data_inlined, True)[0]
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16363
diff changeset
206 for i, r in enumerate(ix):
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16363
diff changeset
207 if r[7] == nullid:
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16363
diff changeset
208 i = -1
16620
e22d6b1dec1d tests: fix test-parseindex2.py when run with --pure
Bryan O'Sullivan <bryano@fb.com>
parents: 16414
diff changeset
209 try:
e22d6b1dec1d tests: fix test-parseindex2.py when run with --pure
Bryan O'Sullivan <bryano@fb.com>
parents: 16414
diff changeset
210 if ix[r[7]] != i:
28754
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
211 print('Reverse lookup inconsistent for %r'
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
212 % r[7].encode('hex'))
16620
e22d6b1dec1d tests: fix test-parseindex2.py when run with --pure
Bryan O'Sullivan <bryano@fb.com>
parents: 16414
diff changeset
213 except TypeError:
e22d6b1dec1d tests: fix test-parseindex2.py when run with --pure
Bryan O'Sullivan <bryano@fb.com>
parents: 16414
diff changeset
214 # pure version doesn't support this
e22d6b1dec1d tests: fix test-parseindex2.py when run with --pure
Bryan O'Sullivan <bryano@fb.com>
parents: 16414
diff changeset
215 break
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16363
diff changeset
216
28754
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
217 print("done")
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
218
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
219 runtest()