context: add workingcommitctx for exact context to be committed
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Wed, 31 Dec 2014 17:55:43 +0900
changeset 23710 745e3b485632
parent 23709 33e5431684c0
child 23711 1e6fb8db666e
context: add workingcommitctx for exact context to be committed Before this patch, "workingctx" is also used for the context to be committed. But "workingctx" works incorrectly in some cases. For example, even when only some of changed files in the working directory are committed, "status()" on "workingctx" object for committing recognizes files not to be committed as changed, too. As the preparation for fixing these issues, this patch chooses adding new class "workingcommitctx" for exact context to be committed, because switching by the flag (like "self._fixedstatus" or so) in some code paths of "workingctx" is less readable and maintenancable.
mercurial/context.py
mercurial/localrepo.py
--- a/mercurial/context.py	Wed Dec 31 17:55:43 2014 +0900
+++ b/mercurial/context.py	Wed Dec 31 17:55:43 2014 +0900
@@ -1622,6 +1622,18 @@
         """wraps repo.wwrite"""
         self._repo.wwrite(self._path, data, flags)
 
+class workingcommitctx(workingctx):
+    """A workingcommitctx object makes access to data related to
+    the revision being committed convenient.
+
+    This hides changes in the working directory, if they aren't
+    committed in this context.
+    """
+    def __init__(self, repo, changes,
+                 text="", user=None, date=None, extra=None):
+        super(workingctx, self).__init__(repo, text, user, date, extra,
+                                         changes)
+
 class memctx(committablectx):
     """Use memctx to perform in-memory commits via localrepo.commitctx().
 
--- a/mercurial/localrepo.py	Wed Dec 31 17:55:43 2014 +0900
+++ b/mercurial/localrepo.py	Wed Dec 31 17:55:43 2014 +0900
@@ -1343,7 +1343,8 @@
                     elif f not in self.dirstate:
                         fail(f, _("file not tracked!"))
 
-            cctx = context.workingctx(self, text, user, date, extra, status)
+            cctx = context.workingcommitctx(self, status,
+                                            text, user, date, extra)
 
             if (not force and not extra.get("close") and not merge
                 and not cctx.files()