##// END OF EJS Templates
tests: don't emit false failures when sqlite3 is missing...
Augie Fackler -
r40399:c3ad9ef0 default
parent child Browse files
Show More
@@ -1,41 +1,46 b''
1 from __future__ import absolute_import, print_function
1 from __future__ import absolute_import, print_function
2 import os
2 import os
3 from mercurial import (
3 from mercurial import (
4 commands,
4 commands,
5 extensions,
5 extensions,
6 ui as uimod,
6 ui as uimod,
7 )
7 )
8
8
9 ignore = {b'highlight', b'win32text', b'factotum', b'beautifygraph'}
9 ignore = {b'highlight', b'win32text', b'factotum', b'beautifygraph'}
10
10
11 try:
12 import sqlite3
13 except ImportError:
14 ignore.add(b'sqlitestore')
15
11 if os.name != 'nt':
16 if os.name != 'nt':
12 ignore.add(b'win32mbcs')
17 ignore.add(b'win32mbcs')
13
18
14 disabled = [ext for ext in extensions.disabled().keys() if ext not in ignore]
19 disabled = [ext for ext in extensions.disabled().keys() if ext not in ignore]
15
20
16 hgrc = open(os.environ["HGRCPATH"], 'wb')
21 hgrc = open(os.environ["HGRCPATH"], 'wb')
17 hgrc.write(b'[extensions]\n')
22 hgrc.write(b'[extensions]\n')
18
23
19 for ext in disabled:
24 for ext in disabled:
20 hgrc.write(ext + b'=\n')
25 hgrc.write(ext + b'=\n')
21
26
22 hgrc.close()
27 hgrc.close()
23
28
24 u = uimod.ui.load()
29 u = uimod.ui.load()
25 extensions.loadall(u)
30 extensions.loadall(u)
26
31
27 globalshort = set()
32 globalshort = set()
28 globallong = set()
33 globallong = set()
29 for option in commands.globalopts:
34 for option in commands.globalopts:
30 option[0] and globalshort.add(option[0])
35 option[0] and globalshort.add(option[0])
31 option[1] and globallong.add(option[1])
36 option[1] and globallong.add(option[1])
32
37
33 for cmd, entry in commands.table.items():
38 for cmd, entry in commands.table.items():
34 seenshort = globalshort.copy()
39 seenshort = globalshort.copy()
35 seenlong = globallong.copy()
40 seenlong = globallong.copy()
36 for option in entry[1]:
41 for option in entry[1]:
37 if (option[0] and option[0] in seenshort) or \
42 if (option[0] and option[0] in seenshort) or \
38 (option[1] and option[1] in seenlong):
43 (option[1] and option[1] in seenlong):
39 print("command '" + cmd + "' has duplicate option " + str(option))
44 print("command '" + cmd + "' has duplicate option " + str(option))
40 seenshort.add(option[0])
45 seenshort.add(option[0])
41 seenlong.add(option[1])
46 seenlong.add(option[1])
@@ -1,121 +1,125 b''
1 # This test verifies the conformance of various classes to various
1 # This test verifies the conformance of various classes to various
2 # storage interfaces.
2 # storage interfaces.
3 from __future__ import absolute_import
3 from __future__ import absolute_import
4
4
5 import silenttestrunner
5 import silenttestrunner
6
6
7 from mercurial import (
7 from mercurial import (
8 error,
8 error,
9 filelog,
9 filelog,
10 revlog,
10 revlog,
11 transaction,
11 transaction,
12 ui as uimod,
12 ui as uimod,
13 vfs as vfsmod,
13 vfs as vfsmod,
14 )
14 )
15
15
16 from mercurial.testing import (
16 from mercurial.testing import (
17 storage as storagetesting,
17 storage as storagetesting,
18 )
18 )
19
19
20 try:
20 from hgext import (
21 from hgext import (
21 sqlitestore,
22 sqlitestore,
22 )
23 )
24 except ImportError:
25 sqlitestore = None
23
26
24 try:
27 try:
25 from mercurial import zstd
28 from mercurial import zstd
26 zstd.__version__
29 zstd.__version__
27 except ImportError:
30 except ImportError:
28 zstd = None
31 zstd = None
29
32
30 STATE = {
33 STATE = {
31 'lastindex': 0,
34 'lastindex': 0,
32 'ui': uimod.ui(),
35 'ui': uimod.ui(),
33 'vfs': vfsmod.vfs(b'.', realpath=True),
36 'vfs': vfsmod.vfs(b'.', realpath=True),
34 }
37 }
35
38
36 def makefilefn(self):
39 def makefilefn(self):
37 """Factory for filelog instances."""
40 """Factory for filelog instances."""
38 fl = filelog.filelog(STATE['vfs'], b'filelog-%d' % STATE['lastindex'])
41 fl = filelog.filelog(STATE['vfs'], b'filelog-%d' % STATE['lastindex'])
39 STATE['lastindex'] += 1
42 STATE['lastindex'] += 1
40 return fl
43 return fl
41
44
42 def maketransaction(self):
45 def maketransaction(self):
43 vfsmap = {b'plain': STATE['vfs'], b'store': STATE['vfs']}
46 vfsmap = {b'plain': STATE['vfs'], b'store': STATE['vfs']}
44
47
45 return transaction.transaction(STATE['ui'].warn, STATE['vfs'], vfsmap,
48 return transaction.transaction(STATE['ui'].warn, STATE['vfs'], vfsmap,
46 b'journal', b'undo')
49 b'journal', b'undo')
47
50
48 def addrawrevision(self, fl, tr, node, p1, p2, linkrev, rawtext=None,
51 def addrawrevision(self, fl, tr, node, p1, p2, linkrev, rawtext=None,
49 delta=None, censored=False, ellipsis=False, extstored=False):
52 delta=None, censored=False, ellipsis=False, extstored=False):
50 flags = 0
53 flags = 0
51
54
52 if censored:
55 if censored:
53 flags |= revlog.REVIDX_ISCENSORED
56 flags |= revlog.REVIDX_ISCENSORED
54 if ellipsis:
57 if ellipsis:
55 flags |= revlog.REVIDX_ELLIPSIS
58 flags |= revlog.REVIDX_ELLIPSIS
56 if extstored:
59 if extstored:
57 flags |= revlog.REVIDX_EXTSTORED
60 flags |= revlog.REVIDX_EXTSTORED
58
61
59 if rawtext is not None:
62 if rawtext is not None:
60 fl._revlog.addrawrevision(rawtext, tr, linkrev, p1, p2, node, flags)
63 fl._revlog.addrawrevision(rawtext, tr, linkrev, p1, p2, node, flags)
61 elif delta is not None:
64 elif delta is not None:
62 fl._revlog.addrawrevision(rawtext, tr, linkrev, p1, p2, node, flags,
65 fl._revlog.addrawrevision(rawtext, tr, linkrev, p1, p2, node, flags,
63 cachedelta=delta)
66 cachedelta=delta)
64 else:
67 else:
65 raise error.Abort('must supply rawtext or delta arguments')
68 raise error.Abort('must supply rawtext or delta arguments')
66
69
67 # We may insert bad data. Clear caches to prevent e.g. cache hits to
70 # We may insert bad data. Clear caches to prevent e.g. cache hits to
68 # bypass hash verification.
71 # bypass hash verification.
69 fl._revlog.clearcaches()
72 fl._revlog.clearcaches()
70
73
71 # Assigning module-level attributes that inherit from unittest.TestCase
74 # Assigning module-level attributes that inherit from unittest.TestCase
72 # is all that is needed to register tests.
75 # is all that is needed to register tests.
73 filelogindextests = storagetesting.makeifileindextests(makefilefn,
76 filelogindextests = storagetesting.makeifileindextests(makefilefn,
74 maketransaction,
77 maketransaction,
75 addrawrevision)
78 addrawrevision)
76 filelogdatatests = storagetesting.makeifiledatatests(makefilefn,
79 filelogdatatests = storagetesting.makeifiledatatests(makefilefn,
77 maketransaction,
80 maketransaction,
78 addrawrevision)
81 addrawrevision)
79 filelogmutationtests = storagetesting.makeifilemutationtests(makefilefn,
82 filelogmutationtests = storagetesting.makeifilemutationtests(makefilefn,
80 maketransaction,
83 maketransaction,
81 addrawrevision)
84 addrawrevision)
82
85
83 def makesqlitefile(self):
86 def makesqlitefile(self):
84 path = STATE['vfs'].join(b'db-%d.db' % STATE['lastindex'])
87 path = STATE['vfs'].join(b'db-%d.db' % STATE['lastindex'])
85 STATE['lastindex'] += 1
88 STATE['lastindex'] += 1
86
89
87 db = sqlitestore.makedb(path)
90 db = sqlitestore.makedb(path)
88
91
89 compression = b'zstd' if zstd else b'zlib'
92 compression = b'zstd' if zstd else b'zlib'
90
93
91 return sqlitestore.sqlitefilestore(db, b'dummy-path', compression)
94 return sqlitestore.sqlitefilestore(db, b'dummy-path', compression)
92
95
93 def addrawrevisionsqlite(self, fl, tr, node, p1, p2, linkrev, rawtext=None,
96 def addrawrevisionsqlite(self, fl, tr, node, p1, p2, linkrev, rawtext=None,
94 delta=None, censored=False, ellipsis=False,
97 delta=None, censored=False, ellipsis=False,
95 extstored=False):
98 extstored=False):
96 flags = 0
99 flags = 0
97
100
98 if censored:
101 if censored:
99 flags |= sqlitestore.FLAG_CENSORED
102 flags |= sqlitestore.FLAG_CENSORED
100
103
101 if ellipsis | extstored:
104 if ellipsis | extstored:
102 raise error.Abort(b'support for ellipsis and extstored flags not '
105 raise error.Abort(b'support for ellipsis and extstored flags not '
103 b'supported')
106 b'supported')
104
107
105 if rawtext is not None:
108 if rawtext is not None:
106 fl._addrawrevision(node, rawtext, tr, linkrev, p1, p2, flags=flags)
109 fl._addrawrevision(node, rawtext, tr, linkrev, p1, p2, flags=flags)
107 elif delta is not None:
110 elif delta is not None:
108 fl._addrawrevision(node, rawtext, tr, linkrev, p1, p2,
111 fl._addrawrevision(node, rawtext, tr, linkrev, p1, p2,
109 storedelta=delta, flags=flags)
112 storedelta=delta, flags=flags)
110 else:
113 else:
111 raise error.Abort(b'must supply rawtext or delta arguments')
114 raise error.Abort(b'must supply rawtext or delta arguments')
112
115
116 if sqlitestore is not None:
113 sqlitefileindextests = storagetesting.makeifileindextests(
117 sqlitefileindextests = storagetesting.makeifileindextests(
114 makesqlitefile, maketransaction, addrawrevisionsqlite)
118 makesqlitefile, maketransaction, addrawrevisionsqlite)
115 sqlitefiledatatests = storagetesting.makeifiledatatests(
119 sqlitefiledatatests = storagetesting.makeifiledatatests(
116 makesqlitefile, maketransaction, addrawrevisionsqlite)
120 makesqlitefile, maketransaction, addrawrevisionsqlite)
117 sqlitefilemutationtests = storagetesting.makeifilemutationtests(
121 sqlitefilemutationtests = storagetesting.makeifilemutationtests(
118 makesqlitefile, maketransaction, addrawrevisionsqlite)
122 makesqlitefile, maketransaction, addrawrevisionsqlite)
119
123
120 if __name__ == '__main__':
124 if __name__ == '__main__':
121 silenttestrunner.main(__name__)
125 silenttestrunner.main(__name__)
General Comments 0
You need to be logged in to leave comments. Login now