mirror of
https://github.com/facebook/sapling.git
synced 2024-12-26 22:47:26 +03:00
0bc787c4c0
Summary: This module previously used to handle deciding how a particular module should be imported if it had multiple versions (e.g., pure Python or native). However, as of D18819680 it was changed to always import the native C version. Lets go ahead and remove it entirely now. Using `policy.importmod` simply makes it harder for type checkers to figure out the actual module that will be used. The only functionality that `policy.importmod()` still provided was verifying that the module contained a "version" field that looked like what was expected. In practice these version numbers are not bumped often, so this doesn't really seem to provide much value in checking that we imported the correct version that we expected to be shipped with this release. Reviewed By: xavierd Differential Revision: D19958227 fbshipit-source-id: 05f1d027d0a41cf99c4aa93cb84a51e830305077
98 lines
2.9 KiB
Python
98 lines
2.9 KiB
Python
# extension to emulate invoking 'dirstate.write()' at the time
|
|
# specified by '[fakedirstatewritetime] fakenow', only when
|
|
# 'dirstate.write()' is invoked via functions below:
|
|
#
|
|
# - 'workingctx._poststatusfixup()' (= 'repo.status()')
|
|
# - 'committablectx.markcommitted()'
|
|
|
|
from __future__ import absolute_import
|
|
|
|
from edenscm.mercurial import (
|
|
context,
|
|
dirstate,
|
|
extensions,
|
|
pycompat,
|
|
registrar,
|
|
treedirstate,
|
|
treestate,
|
|
util,
|
|
)
|
|
from edenscmnative import parsers
|
|
|
|
|
|
configtable = {}
|
|
configitem = registrar.configitem(configtable)
|
|
|
|
configitem("fakedirstatewritetime", "fakenow", default=None)
|
|
|
|
|
|
def pack_dirstate(fakenow, orig, dmap, copymap, pl, now):
|
|
# execute what original parsers.pack_dirstate should do actually
|
|
# for consistency
|
|
actualnow = int(now)
|
|
for f, e in pycompat.iteritems(dmap):
|
|
if e[0] == "n" and e[3] == actualnow:
|
|
e = parsers.dirstatetuple(e[0], e[1], e[2], -1)
|
|
dmap[f] = e
|
|
|
|
return orig(dmap, copymap, pl, fakenow)
|
|
|
|
|
|
def fakewrite(ui, func):
|
|
# fake "now" of 'pack_dirstate' only if it is invoked while 'func'
|
|
|
|
fakenow = ui.config("fakedirstatewritetime", "fakenow")
|
|
if not fakenow:
|
|
# Execute original one, if fakenow isn't configured. This is
|
|
# useful to prevent subrepos from executing replaced one,
|
|
# because replacing 'parsers.pack_dirstate' is also effective
|
|
# in subrepos.
|
|
return func()
|
|
|
|
fakenow = util.parsedate(fakenow)[0]
|
|
|
|
orig_pack_dirstate = parsers.pack_dirstate
|
|
orig_dirstate_getfsnow = dirstate._getfsnow
|
|
wrapper = lambda *args: pack_dirstate(fakenow, orig_pack_dirstate, *args)
|
|
|
|
parsers.pack_dirstate = wrapper
|
|
dirstate._getfsnow = lambda *args: fakenow
|
|
try:
|
|
return func()
|
|
finally:
|
|
parsers.pack_dirstate = orig_pack_dirstate
|
|
dirstate._getfsnow = orig_dirstate_getfsnow
|
|
|
|
|
|
def _poststatusfixup(orig, self, status, workingctx, oldid):
|
|
ui = workingctx.repo().ui
|
|
return fakewrite(ui, lambda: orig(self, status, workingctx, oldid))
|
|
|
|
|
|
def markcommitted(orig, committablectx, node):
|
|
ui = committablectx.repo().ui
|
|
return fakewrite(ui, lambda: orig(committablectx, node))
|
|
|
|
|
|
def treedirstatewrite(orig, self, st, now):
|
|
ui = self._ui
|
|
fakenow = ui.config("fakedirstatewritetime", "fakenow")
|
|
if fakenow:
|
|
now = util.parsedate(fakenow)[0]
|
|
return orig(self, st, now)
|
|
|
|
|
|
def treestatewrite(orig, self, st, now):
|
|
ui = self._ui
|
|
fakenow = ui.config("fakedirstatewritetime", "fakenow")
|
|
if fakenow:
|
|
now = util.parsedate(fakenow)[0]
|
|
return orig(self, st, now)
|
|
|
|
|
|
def extsetup(ui):
|
|
extensions.wrapfunction(dirstate.dirstate, "_poststatusfixup", _poststatusfixup)
|
|
extensions.wrapfunction(context.committablectx, "markcommitted", markcommitted)
|
|
extensions.wrapfunction(treedirstate.treedirstatemap, "write", treedirstatewrite)
|
|
extensions.wrapfunction(treestate.treestatemap, "write", treestatewrite)
|