comparison mercurial/destutil.py @ 28102:bd74b5e0d2c0

destutil: extract all 'mergedest' abort messages into a dictionary We plan to be able to reuse this function for rebase. The error message explicitly refers to "merge" in multiple places. So we'll need to be able to use different messages. The first step of that is to extract all messages in a dedicated dictionary and use them indirectly. As a side effect it clarifies the actual function and opens the way to various cleanups and fixes in future changesets.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Tue, 09 Feb 2016 21:14:37 +0000
parents 6b1fc09c699a
children 7d852bb47b0a
comparison
equal deleted inserted replaced
28101:79437fb352ce 28102:bd74b5e0d2c0
132 132
133 _destupdatevalidate(repo, rev, clean, check) 133 _destupdatevalidate(repo, rev, clean, check)
134 134
135 return rev, movemark, activemark 135 return rev, movemark, activemark
136 136
137 msgdestmerge = {
138 # too many matching divergent bookmark
139 'toomanybookmarks':
140 (_("multiple matching bookmarks to merge -"
141 " please merge with an explicit rev or bookmark"),
142 _("run 'hg heads' to see all heads")),
143 # no other matching divergent bookmark
144 'nootherbookmarks':
145 (_("no matching bookmark to merge - "
146 "please merge with an explicit rev or bookmark"),
147 _("run 'hg heads' to see all heads")),
148 # branch have too many unbookmarked heads, no obvious destination
149 'toomanyheads':
150 (_("branch '%s' has %d heads - please merge with an explicit rev"),
151 _("run 'hg heads .' to see heads")),
152 # branch have no other unbookmarked heads
153 'bookmarkedheads':
154 (_("heads are bookmarked - please merge with an explicit rev"),
155 _("run 'hg heads' to see all heads")),
156 # branch have just a single heads, but there is other branches
157 'nootherbranchheads':
158 (_("branch '%s' has one head - please merge with an explicit rev"),
159 _("run 'hg heads' to see all heads")),
160 # repository have a single head
161 'nootherheads':
162 (_('nothing to merge'),
163 None),
164 # repository have a single head and we are not on it
165 'nootherheadsbehind':
166 (_('nothing to merge'),
167 _("use 'hg update' instead")),
168 # We are not on a head
169 'notatheads':
170 (_('working directory not at a head revision'),
171 _("use 'hg update' or merge with an explicit revision"))
172 }
173
137 def _destmergebook(repo): 174 def _destmergebook(repo):
138 """find merge destination in the active bookmark case""" 175 """find merge destination in the active bookmark case"""
139 node = None 176 node = None
140 bmheads = repo.bookmarkheads(repo._activebookmark) 177 bmheads = repo.bookmarkheads(repo._activebookmark)
141 curhead = repo[repo._activebookmark].node() 178 curhead = repo[repo._activebookmark].node()
143 if curhead == bmheads[0]: 180 if curhead == bmheads[0]:
144 node = bmheads[1] 181 node = bmheads[1]
145 else: 182 else:
146 node = bmheads[0] 183 node = bmheads[0]
147 elif len(bmheads) > 2: 184 elif len(bmheads) > 2:
148 raise error.Abort(_("multiple matching bookmarks to merge - " 185 msg, hint = msgdestmerge['toomanybookmarks']
149 "please merge with an explicit rev or bookmark"), 186 raise error.Abort(msg, hint=hint)
150 hint=_("run 'hg heads' to see all heads"))
151 elif len(bmheads) <= 1: 187 elif len(bmheads) <= 1:
152 raise error.Abort(_("no matching bookmark to merge - " 188 msg, hint = msgdestmerge['nootherbookmarks']
153 "please merge with an explicit rev or bookmark"), 189 raise error.Abort(msg, hint=hint)
154 hint=_("run 'hg heads' to see all heads"))
155 assert node is not None 190 assert node is not None
156 return node 191 return node
157 192
158 def _destmergebranch(repo): 193 def _destmergebranch(repo):
159 """find merge destination based on branch heads""" 194 """find merge destination based on branch heads"""
161 branch = repo[None].branch() 196 branch = repo[None].branch()
162 bheads = repo.branchheads(branch) 197 bheads = repo.branchheads(branch)
163 nbhs = [bh for bh in bheads if not repo[bh].bookmarks()] 198 nbhs = [bh for bh in bheads if not repo[bh].bookmarks()]
164 199
165 if len(nbhs) > 2: 200 if len(nbhs) > 2:
166 raise error.Abort(_("branch '%s' has %d heads - " 201 msg, hint = msgdestmerge['toomanyheads']
167 "please merge with an explicit rev") 202 msg %= (branch, len(bheads))
168 % (branch, len(bheads)), 203 raise error.Abort(msg, hint=hint)
169 hint=_("run 'hg heads .' to see heads"))
170 204
171 parent = repo.dirstate.p1() 205 parent = repo.dirstate.p1()
172 if len(nbhs) <= 1: 206 if len(nbhs) <= 1:
173 if len(bheads) > 1: 207 if len(bheads) > 1:
174 raise error.Abort(_("heads are bookmarked - " 208 msg, hint = msgdestmerge['bookmarkedheads']
175 "please merge with an explicit rev"), 209 elif len(repo.heads()) > 1:
176 hint=_("run 'hg heads' to see all heads")) 210 msg, hint = msgdestmerge['nootherbranchheads']
177 if len(repo.heads()) > 1: 211 msg %= branch
178 raise error.Abort(_("branch '%s' has one head - " 212 elif parent != repo.lookup(branch):
179 "please merge with an explicit rev") 213 msg, hint = msgdestmerge['nootherheadsbehind']
180 % branch, 214 else:
181 hint=_("run 'hg heads' to see all heads")) 215 msg, hint = msgdestmerge['nootherheads']
182 msg, hint = _('nothing to merge'), None
183 if parent != repo.lookup(branch):
184 hint = _("use 'hg update' instead")
185 raise error.Abort(msg, hint=hint) 216 raise error.Abort(msg, hint=hint)
186 217
187 if parent not in bheads: 218 if parent not in bheads:
188 raise error.Abort(_('working directory not at a head revision'), 219 msg, hint = msgdestmerge['notatheads']
189 hint=_("use 'hg update' or merge with an " 220 raise error.Abort(msg, hint=hint)
190 "explicit revision"))
191 if parent == nbhs[0]: 221 if parent == nbhs[0]:
192 node = nbhs[-1] 222 node = nbhs[-1]
193 else: 223 else:
194 node = nbhs[0] 224 node = nbhs[0]
195 assert node is not None 225 assert node is not None