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
--- 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