# HG changeset patch
# User FUJIWARA Katsunori <fo...@lares.dti.ne.jp>
# Date 1487607659 -32400
#      Tue Feb 21 01:20:59 2017 +0900
# Node ID a09a59d24e389e291bb2bbf943644d60a9231ce0
# Parent  693a5bb478543a986808264e586073a3ceedc38f
txnutil: factor out the logic to read file in according to HG_PENDING

This patch adds new file txnutil.py, because:

  - transaction.py is too large to import small utility logic
  - scmutil.py or so causes cyclic importing in phases.py

mayhavepending() is defined separately for convenience in subsequent
patch.

diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -23,6 +23,7 @@ from . import (
     pathutil,
     pycompat,
     scmutil,
+    txnutil,
     util,
 )
 
@@ -59,22 +60,6 @@ def nonnormalentries(dmap):
         return set(fname for fname, e in dmap.iteritems()
                    if e[0] != 'n' or e[3] == -1)
 
-def _trypending(root, vfs, filename):
-    '''Open  file to be read according to HG_PENDING environment variable
-
-    This opens '.pending' of specified 'filename' only when HG_PENDING
-    is equal to 'root'.
-
-    This returns '(fp, is_pending_opened)' tuple.
-    '''
-    if root == encoding.environ.get('HG_PENDING'):
-        try:
-            return (vfs('%s.pending' % filename), True)
-        except IOError as inst:
-            if inst.errno != errno.ENOENT:
-                raise
-    return (vfs(filename), False)
-
 class dirstate(object):
 
     def __init__(self, opener, ui, root, validate):
@@ -385,7 +370,7 @@ class dirstate(object):
             raise
 
     def _opendirstatefile(self):
-        fp, mode = _trypending(self._root, self._opener, self._filename)
+        fp, mode = txnutil.trypending(self._root, self._opener, self._filename)
         if self._pendingmode is not None and self._pendingmode != mode:
             fp.close()
             raise error.Abort(_('working directory state may be '
diff --git a/mercurial/txnutil.py b/mercurial/txnutil.py
new file mode 100644
--- /dev/null
+++ b/mercurial/txnutil.py
@@ -0,0 +1,36 @@
+# txnutil.py - transaction related utilities
+#
+#  Copyright FUJIWARA Katsunori <fo...@lares.dti.ne.jp> and others
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+from __future__ import absolute_import
+
+import errno
+
+from . import (
+    encoding,
+)
+
+def mayhavepending(root):
+    '''return whether 'root' may have pending changes, which are
+    visible to this process.
+    '''
+    return root == encoding.environ.get('HG_PENDING')
+
+def trypending(root, vfs, filename, **kwargs):
+    '''Open  file to be read according to HG_PENDING environment variable
+
+    This opens '.pending' of specified 'filename' only when HG_PENDING
+    is equal to 'root'.
+
+    This returns '(fp, is_pending_opened)' tuple.
+    '''
+    if mayhavepending(root):
+        try:
+            return (vfs('%s.pending' % filename, **kwargs), True)
+        except IOError as inst:
+            if inst.errno != errno.ENOENT:
+                raise
+    return (vfs(filename, **kwargs), False)
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to