Read about our upcoming Code of Conduct on this issue

This instance was upgraded to Heptapod 0.28.0 today

Commit e2ecb394 authored by Pierre-Yves David's avatar Pierre-Yves David 🐙
Browse files

dirstate: move "get fs now" in the timestamp utility module

We will need it during update.

Differential Revision: https://phab.mercurial-scm.org/D11783
parent 3d6eb119200d
......@@ -66,16 +66,6 @@ class rootcache(filecache):
return obj._join(fname)
def _getfsnow(vfs):
'''Get "now" timestamp on filesystem'''
tmpfd, tmpname = vfs.mkstemp()
try:
return timestamp.mtime_of(os.fstat(tmpfd))
finally:
os.close(tmpfd)
vfs.unlink(tmpname)
def requires_parents_change(func):
def wrap(self, *args, **kwargs):
if not self.pendingparentchange():
......@@ -787,7 +777,7 @@ class dirstate(object):
# https://www.mercurial-scm.org/wiki/DirstateTransactionPlan
# record when mtime start to be ambiguous
now = _getfsnow(self._opener)
now = timestamp.get_fs_now(self._opener)
# delay writing in-memory changes out
tr.addfilegenerator(
......
......@@ -6,6 +6,7 @@
from __future__ import absolute_import
import functools
import os
import stat
......@@ -54,6 +55,19 @@ class timestamp(tuple):
return self_subsec_nanos > other_subsec_nanos
def get_fs_now(vfs):
"""return a timestamp for "now" in the current vfs
This will raise an exception if no temporary files could be created.
"""
tmpfd, tmpname = vfs.mkstemp()
try:
return mtime_of(os.fstat(tmpfd))
finally:
os.close(tmpfd)
vfs.unlink(tmpname)
def zero():
"""
Returns the `timestamp` at the Unix epoch.
......
......@@ -9,7 +9,6 @@ from __future__ import absolute_import
from mercurial import (
context,
dirstate,
dirstatemap as dirstatemapmod,
extensions,
policy,
......@@ -73,19 +72,19 @@ def fakewrite(ui, func):
)
dirstatemapmod.dirstatemap.write = wrapper
orig_dirstate_getfsnow = dirstate._getfsnow
orig_get_fs_now = timestamp.get_fs_now
wrapper = lambda *args: pack_dirstate(fakenow, orig_pack_dirstate, *args)
orig_module = parsers
orig_pack_dirstate = parsers.pack_dirstate
orig_module.pack_dirstate = wrapper
dirstate._getfsnow = lambda *args: fakenow
timestamp.get_fs_now = lambda *args: fakenow
try:
return func()
finally:
orig_module.pack_dirstate = orig_pack_dirstate
dirstate._getfsnow = orig_dirstate_getfsnow
timestamp.get_fs_now = orig_get_fs_now
if has_rust_dirstate:
dirstatemapmod.dirstatemap.write = orig_dirstatemap_write
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment