##// END OF EJS Templates
rust-dirstate: call parse/pack bindings from Python...
Raphaël Gomès -
r42490:9c6c0f73 default
parent child Browse files
Show More
@@ -27,6 +27,12 from . import (
27 util,
27 util,
28 )
28 )
29
29
30 try:
31 from . import rustext
32 rustext.__name__ # force actual import (see hgdemandimport)
33 except ImportError:
34 rustext = None
35
30 parsers = policy.importmod(r'parsers')
36 parsers = policy.importmod(r'parsers')
31
37
32 propertycache = util.propertycache
38 propertycache = util.propertycache
@@ -1465,7 +1471,12 class dirstatemap(object):
1465 # parsing the dirstate.
1471 # parsing the dirstate.
1466 #
1472 #
1467 # (we cannot decorate the function directly since it is in a C module)
1473 # (we cannot decorate the function directly since it is in a C module)
1468 parse_dirstate = util.nogc(parsers.parse_dirstate)
1474 if rustext is not None:
1475 parse_dirstate = rustext.dirstate.parse_dirstate
1476 else:
1477 parse_dirstate = parsers.parse_dirstate
1478
1479 parse_dirstate = util.nogc(parse_dirstate)
1469 p = parse_dirstate(self._map, self.copymap, st)
1480 p = parse_dirstate(self._map, self.copymap, st)
1470 if not self._dirtyparents:
1481 if not self._dirtyparents:
1471 self.setparents(*p)
1482 self.setparents(*p)
@@ -1476,7 +1487,12 class dirstatemap(object):
1476 self.get = self._map.get
1487 self.get = self._map.get
1477
1488
1478 def write(self, st, now):
1489 def write(self, st, now):
1479 st.write(parsers.pack_dirstate(self._map, self.copymap,
1490 if rustext is not None:
1491 pack_dirstate = rustext.dirstate.pack_dirstate
1492 else:
1493 pack_dirstate = parsers.pack_dirstate
1494
1495 st.write(pack_dirstate(self._map, self.copymap,
1480 self.parents(), now))
1496 self.parents(), now))
1481 st.close()
1497 st.close()
1482 self._dirtyparents = False
1498 self._dirtyparents = False
@@ -16,6 +16,12 from mercurial import (
16 )
16 )
17 from mercurial.utils import dateutil
17 from mercurial.utils import dateutil
18
18
19 try:
20 from mercurial import rustext
21 rustext.__name__ # force actual import (see hgdemandimport)
22 except ImportError:
23 rustext = None
24
19 configtable = {}
25 configtable = {}
20 configitem = registrar.configitem(configtable)
26 configitem = registrar.configitem(configtable)
21
27
@@ -51,16 +57,22 def fakewrite(ui, func):
51 # 'fakenow' value and 'touch -t YYYYmmddHHMM' argument easy
57 # 'fakenow' value and 'touch -t YYYYmmddHHMM' argument easy
52 fakenow = dateutil.parsedate(fakenow, [b'%Y%m%d%H%M'])[0]
58 fakenow = dateutil.parsedate(fakenow, [b'%Y%m%d%H%M'])[0]
53
59
60 if rustext is not None:
61 orig_module = rustext.dirstate
62 orig_pack_dirstate = rustext.dirstate.pack_dirstate
63 else:
64 orig_module = parsers
54 orig_pack_dirstate = parsers.pack_dirstate
65 orig_pack_dirstate = parsers.pack_dirstate
66
55 orig_dirstate_getfsnow = dirstate._getfsnow
67 orig_dirstate_getfsnow = dirstate._getfsnow
56 wrapper = lambda *args: pack_dirstate(fakenow, orig_pack_dirstate, *args)
68 wrapper = lambda *args: pack_dirstate(fakenow, orig_pack_dirstate, *args)
57
69
58 parsers.pack_dirstate = wrapper
70 orig_module.pack_dirstate = wrapper
59 dirstate._getfsnow = lambda *args: fakenow
71 dirstate._getfsnow = lambda *args: fakenow
60 try:
72 try:
61 return func()
73 return func()
62 finally:
74 finally:
63 parsers.pack_dirstate = orig_pack_dirstate
75 orig_module.pack_dirstate = orig_pack_dirstate
64 dirstate._getfsnow = orig_dirstate_getfsnow
76 dirstate._getfsnow = orig_dirstate_getfsnow
65
77
66 def _poststatusfixup(orig, workingctx, status, fixup):
78 def _poststatusfixup(orig, workingctx, status, fixup):
General Comments 0
You need to be logged in to leave comments. Login now