##// END OF EJS Templates
graft: do not try to skip rev derived from ancestor more than once (issue6024)...
graft: do not try to skip rev derived from ancestor more than once (issue6024) We check 'x in revs' in other cases, so let's do the same. The test case credits to Tom Prince.

File last commit:

r40492:1bf3e604 stable
r40692:3bc2e550 stable
Show More
test-storage.py
133 lines | 4.2 KiB | text/x-python | PythonLexer
Gregory Szorc
testing: add interface unit tests for file storage...
r39808 # This test verifies the conformance of various classes to various
# storage interfaces.
from __future__ import absolute_import
import silenttestrunner
from mercurial import (
Gregory Szorc
testing: add file storage integration for bad hashes and censoring...
r40087 error,
Gregory Szorc
testing: add interface unit tests for file storage...
r39808 filelog,
Gregory Szorc
testing: add file storage integration for bad hashes and censoring...
r40087 revlog,
Gregory Szorc
testing: add interface unit tests for file storage...
r39808 transaction,
ui as uimod,
vfs as vfsmod,
)
from mercurial.testing import (
storage as storagetesting,
)
Augie Fackler
tests: don't emit false failures when sqlite3 is missing...
r40399 try:
from hgext import (
sqlitestore,
)
except ImportError:
sqlitestore = None
Gregory Szorc
sqlitestore: file storage backend using SQLite...
r40362
try:
Yuya Nishihara
tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause...
r40492 import sqlite3
if sqlite3.sqlite_version_info < (3, 8, 3):
# WITH clause not supported
sqlitestore = None
except ImportError:
pass
try:
Gregory Szorc
sqlitestore: file storage backend using SQLite...
r40362 from mercurial import zstd
zstd.__version__
except ImportError:
zstd = None
Gregory Szorc
testing: add interface unit tests for file storage...
r39808 STATE = {
'lastindex': 0,
'ui': uimod.ui(),
'vfs': vfsmod.vfs(b'.', realpath=True),
}
def makefilefn(self):
"""Factory for filelog instances."""
Gregory Szorc
py3: byteify test-storage.py...
r39989 fl = filelog.filelog(STATE['vfs'], b'filelog-%d' % STATE['lastindex'])
Gregory Szorc
testing: add interface unit tests for file storage...
r39808 STATE['lastindex'] += 1
return fl
def maketransaction(self):
Gregory Szorc
tests: use byte literals in test-storage.py...
r40356 vfsmap = {b'plain': STATE['vfs'], b'store': STATE['vfs']}
Gregory Szorc
testing: add interface unit tests for file storage...
r39808
return transaction.transaction(STATE['ui'].warn, STATE['vfs'], vfsmap,
Gregory Szorc
py3: byteify test-storage.py...
r39989 b'journal', b'undo')
Gregory Szorc
testing: add interface unit tests for file storage...
r39808
Gregory Szorc
testing: add file storage integration for bad hashes and censoring...
r40087 def addrawrevision(self, fl, tr, node, p1, p2, linkrev, rawtext=None,
delta=None, censored=False, ellipsis=False, extstored=False):
flags = 0
if censored:
flags |= revlog.REVIDX_ISCENSORED
if ellipsis:
flags |= revlog.REVIDX_ELLIPSIS
if extstored:
flags |= revlog.REVIDX_EXTSTORED
if rawtext is not None:
fl._revlog.addrawrevision(rawtext, tr, linkrev, p1, p2, node, flags)
elif delta is not None:
Gregory Szorc
testing: switch to inserting deltas...
r40359 fl._revlog.addrawrevision(rawtext, tr, linkrev, p1, p2, node, flags,
cachedelta=delta)
Gregory Szorc
testing: add file storage integration for bad hashes and censoring...
r40087 else:
raise error.Abort('must supply rawtext or delta arguments')
# We may insert bad data. Clear caches to prevent e.g. cache hits to
# bypass hash verification.
fl._revlog.clearcaches()
Gregory Szorc
testing: add interface unit tests for file storage...
r39808 # Assigning module-level attributes that inherit from unittest.TestCase
# is all that is needed to register tests.
filelogindextests = storagetesting.makeifileindextests(makefilefn,
Gregory Szorc
testing: add file storage integration for bad hashes and censoring...
r40087 maketransaction,
addrawrevision)
Gregory Szorc
testing: add interface unit tests for file storage...
r39808 filelogdatatests = storagetesting.makeifiledatatests(makefilefn,
Gregory Szorc
testing: add file storage integration for bad hashes and censoring...
r40087 maketransaction,
addrawrevision)
Gregory Szorc
testing: add interface unit tests for file storage...
r39808 filelogmutationtests = storagetesting.makeifilemutationtests(makefilefn,
Gregory Szorc
testing: add file storage integration for bad hashes and censoring...
r40087 maketransaction,
addrawrevision)
Gregory Szorc
testing: add interface unit tests for file storage...
r39808
Gregory Szorc
sqlitestore: file storage backend using SQLite...
r40362 def makesqlitefile(self):
path = STATE['vfs'].join(b'db-%d.db' % STATE['lastindex'])
STATE['lastindex'] += 1
db = sqlitestore.makedb(path)
compression = b'zstd' if zstd else b'zlib'
return sqlitestore.sqlitefilestore(db, b'dummy-path', compression)
def addrawrevisionsqlite(self, fl, tr, node, p1, p2, linkrev, rawtext=None,
delta=None, censored=False, ellipsis=False,
extstored=False):
flags = 0
if censored:
flags |= sqlitestore.FLAG_CENSORED
if ellipsis | extstored:
raise error.Abort(b'support for ellipsis and extstored flags not '
b'supported')
if rawtext is not None:
fl._addrawrevision(node, rawtext, tr, linkrev, p1, p2, flags=flags)
elif delta is not None:
fl._addrawrevision(node, rawtext, tr, linkrev, p1, p2,
storedelta=delta, flags=flags)
else:
raise error.Abort(b'must supply rawtext or delta arguments')
Augie Fackler
tests: don't emit false failures when sqlite3 is missing...
r40399 if sqlitestore is not None:
sqlitefileindextests = storagetesting.makeifileindextests(
makesqlitefile, maketransaction, addrawrevisionsqlite)
sqlitefiledatatests = storagetesting.makeifiledatatests(
makesqlitefile, maketransaction, addrawrevisionsqlite)
sqlitefilemutationtests = storagetesting.makeifilemutationtests(
makesqlitefile, maketransaction, addrawrevisionsqlite)
Gregory Szorc
sqlitestore: file storage backend using SQLite...
r40362
Gregory Szorc
testing: add interface unit tests for file storage...
r39808 if __name__ == '__main__':
silenttestrunner.main(__name__)