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