[PATCH 1 of 7] dirstate: introduce new context manager for marking dirstate parent changes

Augie Fackler raf at durin42.com
Thu May 18 22:19:46 UTC 2017


# HG changeset patch
# User Augie Fackler <augie at google.com>
# Date 1495141830 14400
#      Thu May 18 17:10:30 2017 -0400
# Node ID a69ba7abd7c7396205bbf44984fc5bd028a7f815
# Parent  1f3972ed06833775ada5b23d9c90d1cbb240e4fd
dirstate: introduce new context manager for marking dirstate parent changes

diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -8,6 +8,7 @@
 from __future__ import absolute_import
 
 import collections
+import contextlib
 import errno
 import os
 import stat
@@ -99,6 +100,18 @@ class dirstate(object):
         # for consistent view between _pl() and _read() invocations
         self._pendingmode = None
 
+    @contextlib.contextmanager
+    def parentchange(self):
+        '''Context manager for handling dirstate parents.
+
+        If an exception occurs in the scope of the context manager,
+        the incoherent dirstate won't be written when wlock is
+        released.
+        '''
+        self._parentwriters += 1
+        yield
+        self._parentwriters -= 1
+
     def beginparentchange(self):
         '''Marks the beginning of a set of changes that involve changing
         the dirstate parents. If there is an exception during this time,


More information about the Mercurial-devel mailing list