Mercurial > hg
changeset 48379:08b060abd658
dirstate: move "get fs now" in the timestamp utility module
We will need it during update.
Differential Revision: https://phab.mercurial-scm.org/D11783
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 17 Nov 2021 12:24:00 +0100 |
parents | 3d6eb119200d |
children | 6dc3dc5e9636 |
files | mercurial/dirstate.py mercurial/dirstateutils/timestamp.py tests/fakedirstatewritetime.py |
diffstat | 3 files changed, 18 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/dirstate.py Wed Nov 17 10:26:48 2021 +0100 +++ b/mercurial/dirstate.py Wed Nov 17 12:24:00 2021 +0100 @@ -66,16 +66,6 @@ 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 @@ # 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(
--- a/mercurial/dirstateutils/timestamp.py Wed Nov 17 10:26:48 2021 +0100 +++ b/mercurial/dirstateutils/timestamp.py Wed Nov 17 12:24:00 2021 +0100 @@ -6,6 +6,7 @@ from __future__ import absolute_import import functools +import os import stat @@ -54,6 +55,19 @@ 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.
--- a/tests/fakedirstatewritetime.py Wed Nov 17 10:26:48 2021 +0100 +++ b/tests/fakedirstatewritetime.py Wed Nov 17 12:24:00 2021 +0100 @@ -9,7 +9,6 @@ from mercurial import ( context, - dirstate, dirstatemap as dirstatemapmod, extensions, policy, @@ -73,19 +72,19 @@ ) 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