tests: disable `test-git-interop.t` with a requirements directive
Note that the failures in this test affect all platforms.
I don't like this, but the test has been broken for awhile because of dirstate
API changes, and nobody noticed because the required `pygit2` package isn't
installed on the CI systems. I did install it on the mac CI system, which
triggers this failure. Disabling it is no worse than not running it due to the
missing package, but at least this way the CI systems can get the package
installed, and the test can be enabled and fixed eventually, without needing to
alter the CI systems.
The feature here is kind of abused. I thought about adding one specifically to
test for CI, but didn't feel like doing it at this point. Maybe if we need to
disable things to get the Windows CI off the ground (but that likely requires
testing for CI + platform).
# This test verifies the conformance of various classes to various
# storage interfaces.
import silenttestrunner
from mercurial import (
error,
filelog,
revlog,
transaction,
ui as uimod,
vfs as vfsmod,
)
from mercurial.testing import storage as storagetesting
try:
from mercurial import rustext
rustext.__name__
# Does not pass with pure Rust index
import sys
sys.exit(80)
except ImportError:
pass
try:
from hgext import sqlitestore
except ImportError:
sqlitestore = None
try:
import sqlite3
if sqlite3.sqlite_version_info < (3, 8, 3):
# WITH clause not supported
sqlitestore = None
except ImportError:
pass
try:
from mercurial import zstd
zstd.__version__
except ImportError:
zstd = None
STATE = {
'lastindex': 0,
'ui': uimod.ui(),
'vfs': vfsmod.vfs(b'.', realpath=True),
}
def makefilefn(self):
"""Factory for filelog instances."""
fl = filelog.filelog(STATE['vfs'], b'filelog-%d' % STATE['lastindex'])
STATE['lastindex'] += 1
return fl
def maketransaction(self):
vfsmap = {b'plain': STATE['vfs'], b'store': STATE['vfs']}
return transaction.transaction(
STATE['ui'].warn, STATE['vfs'], vfsmap, b'journal', b'undo'
)
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:
fl._revlog.addrawrevision(
rawtext, tr, linkrev, p1, p2, node, flags, cachedelta=delta
)
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()
# Assigning module-level attributes that inherit from unittest.TestCase
# is all that is needed to register tests.
filelogindextests = storagetesting.makeifileindextests(
makefilefn, maketransaction, addrawrevision
)
filelogdatatests = storagetesting.makeifiledatatests(
makefilefn, maketransaction, addrawrevision
)
filelogmutationtests = storagetesting.makeifilemutationtests(
makefilefn, maketransaction, addrawrevision
)
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')
if sqlitestore is not None:
sqlitefileindextests = storagetesting.makeifileindextests(
makesqlitefile, maketransaction, addrawrevisionsqlite
)
sqlitefiledatatests = storagetesting.makeifiledatatests(
makesqlitefile, maketransaction, addrawrevisionsqlite
)
sqlitefilemutationtests = storagetesting.makeifilemutationtests(
makesqlitefile, maketransaction, addrawrevisionsqlite
)
if __name__ == '__main__':
silenttestrunner.main(__name__)