context: default to using branch from dirstate only in workingctx
authorMartin von Zweigbergk <martinvonz@google.com>
Fri, 10 May 2019 22:24:47 -0700
changeset 42297 62bb49a1d05d
parent 42296 df2f22befdc8
child 42298 9c7f58180878
context: default to using branch from dirstate only in workingctx Same reasoning as previous commits: only the workingctx should know about the dirstate. committablectx now seems free of dirstate references. Differential Revision: https://phab.mercurial-scm.org/D6374
mercurial/context.py
--- a/mercurial/context.py	Fri May 10 22:51:33 2019 -0700
+++ b/mercurial/context.py	Fri May 10 22:24:47 2019 -0700
@@ -1119,13 +1119,7 @@
             self._extra = extra.copy()
         if branch is not None:
             self._extra['branch'] = encoding.fromlocal(branch)
-        elif 'branch' not in self._extra:
-            try:
-                branch = encoding.fromlocal(self._repo.dirstate.branch())
-            except UnicodeDecodeError:
-                raise error.Abort(_('branch name not in UTF-8!'))
-            self._extra['branch'] = branch
-        if self._extra['branch'] == '':
+        if not self._extra.get('branch'):
             self._extra['branch'] = 'default'
 
     def __bytes__(self):
@@ -1242,7 +1236,14 @@
     """
     def __init__(self, repo, text="", user=None, date=None, extra=None,
                  changes=None):
-        super(workingctx, self).__init__(repo, text, user, date, extra, changes)
+        branch = None
+        if not extra or 'branch' not in extra:
+            try:
+                branch = repo.dirstate.branch()
+            except UnicodeDecodeError:
+                raise error.Abort(_('branch name not in UTF-8!'))
+        super(workingctx, self).__init__(repo, text, user, date, extra, changes,
+                                         branch=branch)
 
     def __iter__(self):
         d = self._repo.dirstate