comparison mercurial/context.py @ 42296:df2f22befdc8

context: let caller pass in branch to committablectx.__init__() committablectx.__init__() currently looks up the branch from the dirstate unless it's passed in the extras. memctx.__init__() has a branch argument, but since committablectx.__init__() doesn't accept it, it lets that constructor look up the branch from the dirstate before it overwrites it, which seems awkward. Differential Revision: https://phab.mercurial-scm.org/D6366
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 10 May 2019 22:51:33 -0700
parents fdd4d668ceb5
children 62bb49a1d05d
comparison
equal deleted inserted replaced
42295:fdd4d668ceb5 42296:df2f22befdc8
1100 1100
1101 class committablectx(basectx): 1101 class committablectx(basectx):
1102 """A committablectx object provides common functionality for a context that 1102 """A committablectx object provides common functionality for a context that
1103 wants the ability to commit, e.g. workingctx or memctx.""" 1103 wants the ability to commit, e.g. workingctx or memctx."""
1104 def __init__(self, repo, text="", user=None, date=None, extra=None, 1104 def __init__(self, repo, text="", user=None, date=None, extra=None,
1105 changes=None): 1105 changes=None, branch=None):
1106 super(committablectx, self).__init__(repo) 1106 super(committablectx, self).__init__(repo)
1107 self._rev = None 1107 self._rev = None
1108 self._node = None 1108 self._node = None
1109 self._text = text 1109 self._text = text
1110 if date: 1110 if date:
1115 self._status = changes 1115 self._status = changes
1116 1116
1117 self._extra = {} 1117 self._extra = {}
1118 if extra: 1118 if extra:
1119 self._extra = extra.copy() 1119 self._extra = extra.copy()
1120 if 'branch' not in self._extra: 1120 if branch is not None:
1121 self._extra['branch'] = encoding.fromlocal(branch)
1122 elif 'branch' not in self._extra:
1121 try: 1123 try:
1122 branch = encoding.fromlocal(self._repo.dirstate.branch()) 1124 branch = encoding.fromlocal(self._repo.dirstate.branch())
1123 except UnicodeDecodeError: 1125 except UnicodeDecodeError:
1124 raise error.Abort(_('branch name not in UTF-8!')) 1126 raise error.Abort(_('branch name not in UTF-8!'))
1125 self._extra['branch'] = branch 1127 self._extra['branch'] = branch
2306 # this field to determine what to do in filectxfn. 2308 # this field to determine what to do in filectxfn.
2307 _returnnoneformissingfiles = True 2309 _returnnoneformissingfiles = True
2308 2310
2309 def __init__(self, repo, parents, text, files, filectxfn, user=None, 2311 def __init__(self, repo, parents, text, files, filectxfn, user=None,
2310 date=None, extra=None, branch=None, editor=False): 2312 date=None, extra=None, branch=None, editor=False):
2311 super(memctx, self).__init__(repo, text, user, date, extra) 2313 super(memctx, self).__init__(repo, text, user, date, extra,
2314 branch=branch)
2312 self._rev = None 2315 self._rev = None
2313 self._node = None 2316 self._node = None
2314 parents = [(p or nullid) for p in parents] 2317 parents = [(p or nullid) for p in parents]
2315 p1, p2 = parents 2318 p1, p2 = parents
2316 self._parents = [self._repo[p] for p in (p1, p2)] 2319 self._parents = [self._repo[p] for p in (p1, p2)]
2317 files = sorted(set(files)) 2320 files = sorted(set(files))
2318 self._files = files 2321 self._files = files
2319 if branch is not None:
2320 self._extra['branch'] = encoding.fromlocal(branch)
2321 self.substate = {} 2322 self.substate = {}
2322 2323
2323 if isinstance(filectxfn, patch.filestore): 2324 if isinstance(filectxfn, patch.filestore):
2324 filectxfn = memfilefrompatch(filectxfn) 2325 filectxfn = memfilefrompatch(filectxfn)
2325 elif not callable(filectxfn): 2326 elif not callable(filectxfn):