Mercurial > public > mercurial-scm > hg
comparison mercurial/destutil.py @ 43077:687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Done with
python3.7 contrib/byteify-strings.py -i $(hg files 'set:mercurial/**.py - mercurial/thirdparty/** + hgext/**.py - hgext/fsmonitor/pywatchman/** - mercurial/__init__.py')
black -l 80 -t py33 -S $(hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**" - hgext/fsmonitor/pywatchman/**')
# skip-blame mass-reformatting only
Differential Revision: https://phab.mercurial-scm.org/D6972
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 06 Oct 2019 09:48:39 -0400 |
parents | 2372284d9457 |
children | 8197b395710e |
comparison
equal
deleted
inserted
replaced
43076:2372284d9457 | 43077:687b865b95ad |
---|---|
74 # and the usual case (len = 1) | 74 # and the usual case (len = 1) |
75 successors = [n for sub in successors for n in sub] | 75 successors = [n for sub in successors for n in sub] |
76 | 76 |
77 # get the max revision for the given successors set, | 77 # get the max revision for the given successors set, |
78 # i.e. the 'tip' of a set | 78 # i.e. the 'tip' of a set |
79 node = repo.revs('max(%ln)', successors).first() | 79 node = repo.revs(b'max(%ln)', successors).first() |
80 if bookmarks.isactivewdirparent(repo): | 80 if bookmarks.isactivewdirparent(repo): |
81 movemark = repo['.'].node() | 81 movemark = repo[b'.'].node() |
82 return node, movemark, None | 82 return node, movemark, None |
83 | 83 |
84 | 84 |
85 def _destupdatebook(repo, clean): | 85 def _destupdatebook(repo, clean): |
86 """decide on an update destination from active bookmark""" | 86 """decide on an update destination from active bookmark""" |
100 wc = repo[None] | 100 wc = repo[None] |
101 movemark = node = None | 101 movemark = node = None |
102 currentbranch = wc.branch() | 102 currentbranch = wc.branch() |
103 | 103 |
104 if clean: | 104 if clean: |
105 currentbranch = repo['.'].branch() | 105 currentbranch = repo[b'.'].branch() |
106 | 106 |
107 if currentbranch in repo.branchmap(): | 107 if currentbranch in repo.branchmap(): |
108 heads = repo.branchheads(currentbranch) | 108 heads = repo.branchheads(currentbranch) |
109 if heads: | 109 if heads: |
110 node = repo.revs('max(.::(%ln))', heads).first() | 110 node = repo.revs(b'max(.::(%ln))', heads).first() |
111 if bookmarks.isactivewdirparent(repo): | 111 if bookmarks.isactivewdirparent(repo): |
112 movemark = repo['.'].node() | 112 movemark = repo[b'.'].node() |
113 elif currentbranch == 'default' and not wc.p1(): | 113 elif currentbranch == b'default' and not wc.p1(): |
114 # "null" parent belongs to "default" branch, but it doesn't exist, so | 114 # "null" parent belongs to "default" branch, but it doesn't exist, so |
115 # update to the tipmost non-closed branch head | 115 # update to the tipmost non-closed branch head |
116 node = repo.revs('max(head() and not closed())').first() | 116 node = repo.revs(b'max(head() and not closed())').first() |
117 else: | 117 else: |
118 node = repo['.'].node() | 118 node = repo[b'.'].node() |
119 return node, movemark, None | 119 return node, movemark, None |
120 | 120 |
121 | 121 |
122 def _destupdatebranchfallback(repo, clean): | 122 def _destupdatebranchfallback(repo, clean): |
123 """decide on an update destination from closed heads in current branch""" | 123 """decide on an update destination from closed heads in current branch""" |
125 currentbranch = wc.branch() | 125 currentbranch = wc.branch() |
126 movemark = None | 126 movemark = None |
127 if currentbranch in repo.branchmap(): | 127 if currentbranch in repo.branchmap(): |
128 # here, all descendant branch heads are closed | 128 # here, all descendant branch heads are closed |
129 heads = repo.branchheads(currentbranch, closed=True) | 129 heads = repo.branchheads(currentbranch, closed=True) |
130 assert heads, "any branch has at least one head" | 130 assert heads, b"any branch has at least one head" |
131 node = repo.revs('max(.::(%ln))', heads).first() | 131 node = repo.revs(b'max(.::(%ln))', heads).first() |
132 assert node is not None, ( | 132 assert node is not None, ( |
133 "any revision has at least " "one descendant branch head" | 133 b"any revision has at least " b"one descendant branch head" |
134 ) | 134 ) |
135 if bookmarks.isactivewdirparent(repo): | 135 if bookmarks.isactivewdirparent(repo): |
136 movemark = repo['.'].node() | 136 movemark = repo[b'.'].node() |
137 else: | 137 else: |
138 # here, no "default" branch, and all branches are closed | 138 # here, no "default" branch, and all branches are closed |
139 node = repo.lookup('tip') | 139 node = repo.lookup(b'tip') |
140 assert node is not None, "'tip' exists even in empty repository" | 140 assert node is not None, b"'tip' exists even in empty repository" |
141 return node, movemark, None | 141 return node, movemark, None |
142 | 142 |
143 | 143 |
144 # order in which each step should be evaluated | 144 # order in which each step should be evaluated |
145 # steps are run until one finds a destination | 145 # steps are run until one finds a destination |
146 destupdatesteps = ['evolution', 'bookmark', 'branch', 'branchfallback'] | 146 destupdatesteps = [b'evolution', b'bookmark', b'branch', b'branchfallback'] |
147 # mapping to ease extension overriding steps. | 147 # mapping to ease extension overriding steps. |
148 destupdatestepmap = { | 148 destupdatestepmap = { |
149 'evolution': _destupdateobs, | 149 b'evolution': _destupdateobs, |
150 'bookmark': _destupdatebook, | 150 b'bookmark': _destupdatebook, |
151 'branch': _destupdatebranch, | 151 b'branch': _destupdatebranch, |
152 'branchfallback': _destupdatebranchfallback, | 152 b'branchfallback': _destupdatebranchfallback, |
153 } | 153 } |
154 | 154 |
155 | 155 |
156 def destupdate(repo, clean=False): | 156 def destupdate(repo, clean=False): |
157 """destination for bare update operation | 157 """destination for bare update operation |
174 return rev, movemark, activemark | 174 return rev, movemark, activemark |
175 | 175 |
176 | 176 |
177 msgdestmerge = { | 177 msgdestmerge = { |
178 # too many matching divergent bookmark | 178 # too many matching divergent bookmark |
179 'toomanybookmarks': { | 179 b'toomanybookmarks': { |
180 'merge': ( | 180 b'merge': ( |
181 _( | 181 _( |
182 "multiple matching bookmarks to merge -" | 182 b"multiple matching bookmarks to merge -" |
183 " please merge with an explicit rev or bookmark" | 183 b" please merge with an explicit rev or bookmark" |
184 ), | 184 ), |
185 _("run 'hg heads' to see all heads"), | 185 _(b"run 'hg heads' to see all heads"), |
186 ), | 186 ), |
187 'rebase': ( | 187 b'rebase': ( |
188 _( | 188 _( |
189 "multiple matching bookmarks to rebase -" | 189 b"multiple matching bookmarks to rebase -" |
190 " please rebase to an explicit rev or bookmark" | 190 b" please rebase to an explicit rev or bookmark" |
191 ), | 191 ), |
192 _("run 'hg heads' to see all heads"), | 192 _(b"run 'hg heads' to see all heads"), |
193 ), | 193 ), |
194 }, | 194 }, |
195 # no other matching divergent bookmark | 195 # no other matching divergent bookmark |
196 'nootherbookmarks': { | 196 b'nootherbookmarks': { |
197 'merge': ( | 197 b'merge': ( |
198 _( | 198 _( |
199 "no matching bookmark to merge - " | 199 b"no matching bookmark to merge - " |
200 "please merge with an explicit rev or bookmark" | 200 b"please merge with an explicit rev or bookmark" |
201 ), | 201 ), |
202 _("run 'hg heads' to see all heads"), | 202 _(b"run 'hg heads' to see all heads"), |
203 ), | 203 ), |
204 'rebase': ( | 204 b'rebase': ( |
205 _( | 205 _( |
206 "no matching bookmark to rebase - " | 206 b"no matching bookmark to rebase - " |
207 "please rebase to an explicit rev or bookmark" | 207 b"please rebase to an explicit rev or bookmark" |
208 ), | 208 ), |
209 _("run 'hg heads' to see all heads"), | 209 _(b"run 'hg heads' to see all heads"), |
210 ), | 210 ), |
211 }, | 211 }, |
212 # branch have too many unbookmarked heads, no obvious destination | 212 # branch have too many unbookmarked heads, no obvious destination |
213 'toomanyheads': { | 213 b'toomanyheads': { |
214 'merge': ( | 214 b'merge': ( |
215 _("branch '%s' has %d heads - please merge with an explicit rev"), | 215 _(b"branch '%s' has %d heads - please merge with an explicit rev"), |
216 _("run 'hg heads .' to see heads"), | 216 _(b"run 'hg heads .' to see heads"), |
217 ), | 217 ), |
218 'rebase': ( | 218 b'rebase': ( |
219 _("branch '%s' has %d heads - please rebase to an explicit rev"), | 219 _(b"branch '%s' has %d heads - please rebase to an explicit rev"), |
220 _("run 'hg heads .' to see heads"), | 220 _(b"run 'hg heads .' to see heads"), |
221 ), | 221 ), |
222 }, | 222 }, |
223 # branch have no other unbookmarked heads | 223 # branch have no other unbookmarked heads |
224 'bookmarkedheads': { | 224 b'bookmarkedheads': { |
225 'merge': ( | 225 b'merge': ( |
226 _("heads are bookmarked - please merge with an explicit rev"), | 226 _(b"heads are bookmarked - please merge with an explicit rev"), |
227 _("run 'hg heads' to see all heads"), | 227 _(b"run 'hg heads' to see all heads"), |
228 ), | 228 ), |
229 'rebase': ( | 229 b'rebase': ( |
230 _("heads are bookmarked - please rebase to an explicit rev"), | 230 _(b"heads are bookmarked - please rebase to an explicit rev"), |
231 _("run 'hg heads' to see all heads"), | 231 _(b"run 'hg heads' to see all heads"), |
232 ), | 232 ), |
233 }, | 233 }, |
234 # branch have just a single heads, but there is other branches | 234 # branch have just a single heads, but there is other branches |
235 'nootherbranchheads': { | 235 b'nootherbranchheads': { |
236 'merge': ( | 236 b'merge': ( |
237 _("branch '%s' has one head - please merge with an explicit rev"), | 237 _(b"branch '%s' has one head - please merge with an explicit rev"), |
238 _("run 'hg heads' to see all heads"), | 238 _(b"run 'hg heads' to see all heads"), |
239 ), | 239 ), |
240 'rebase': ( | 240 b'rebase': ( |
241 _("branch '%s' has one head - please rebase to an explicit rev"), | 241 _(b"branch '%s' has one head - please rebase to an explicit rev"), |
242 _("run 'hg heads' to see all heads"), | 242 _(b"run 'hg heads' to see all heads"), |
243 ), | 243 ), |
244 }, | 244 }, |
245 # repository have a single head | 245 # repository have a single head |
246 'nootherheads': { | 246 b'nootherheads': { |
247 'merge': (_('nothing to merge'), None), | 247 b'merge': (_(b'nothing to merge'), None), |
248 'rebase': (_('nothing to rebase'), None), | 248 b'rebase': (_(b'nothing to rebase'), None), |
249 }, | 249 }, |
250 # repository have a single head and we are not on it | 250 # repository have a single head and we are not on it |
251 'nootherheadsbehind': { | 251 b'nootherheadsbehind': { |
252 'merge': (_('nothing to merge'), _("use 'hg update' instead")), | 252 b'merge': (_(b'nothing to merge'), _(b"use 'hg update' instead")), |
253 'rebase': (_('nothing to rebase'), _("use 'hg update' instead")), | 253 b'rebase': (_(b'nothing to rebase'), _(b"use 'hg update' instead")), |
254 }, | 254 }, |
255 # We are not on a head | 255 # We are not on a head |
256 'notatheads': { | 256 b'notatheads': { |
257 'merge': ( | 257 b'merge': ( |
258 _('working directory not at a head revision'), | 258 _(b'working directory not at a head revision'), |
259 _("use 'hg update' or merge with an explicit revision"), | 259 _(b"use 'hg update' or merge with an explicit revision"), |
260 ), | 260 ), |
261 'rebase': ( | 261 b'rebase': ( |
262 _('working directory not at a head revision'), | 262 _(b'working directory not at a head revision'), |
263 _("use 'hg update' or rebase to an explicit revision"), | 263 _(b"use 'hg update' or rebase to an explicit revision"), |
264 ), | 264 ), |
265 }, | 265 }, |
266 'emptysourceset': { | 266 b'emptysourceset': { |
267 'merge': (_('source set is empty'), None), | 267 b'merge': (_(b'source set is empty'), None), |
268 'rebase': (_('source set is empty'), None), | 268 b'rebase': (_(b'source set is empty'), None), |
269 }, | 269 }, |
270 'multiplebranchessourceset': { | 270 b'multiplebranchessourceset': { |
271 'merge': (_('source set is rooted in multiple branches'), None), | 271 b'merge': (_(b'source set is rooted in multiple branches'), None), |
272 'rebase': ( | 272 b'rebase': ( |
273 _('rebaseset is rooted in multiple named branches'), | 273 _(b'rebaseset is rooted in multiple named branches'), |
274 _('specify an explicit destination with --dest'), | 274 _(b'specify an explicit destination with --dest'), |
275 ), | 275 ), |
276 }, | 276 }, |
277 } | 277 } |
278 | 278 |
279 | 279 |
280 def _destmergebook(repo, action='merge', sourceset=None, destspace=None): | 280 def _destmergebook(repo, action=b'merge', sourceset=None, destspace=None): |
281 """find merge destination in the active bookmark case""" | 281 """find merge destination in the active bookmark case""" |
282 node = None | 282 node = None |
283 bmheads = bookmarks.headsforactive(repo) | 283 bmheads = bookmarks.headsforactive(repo) |
284 curhead = repo._bookmarks[repo._activebookmark] | 284 curhead = repo._bookmarks[repo._activebookmark] |
285 if len(bmheads) == 2: | 285 if len(bmheads) == 2: |
286 if curhead == bmheads[0]: | 286 if curhead == bmheads[0]: |
287 node = bmheads[1] | 287 node = bmheads[1] |
288 else: | 288 else: |
289 node = bmheads[0] | 289 node = bmheads[0] |
290 elif len(bmheads) > 2: | 290 elif len(bmheads) > 2: |
291 msg, hint = msgdestmerge['toomanybookmarks'][action] | 291 msg, hint = msgdestmerge[b'toomanybookmarks'][action] |
292 raise error.ManyMergeDestAbort(msg, hint=hint) | 292 raise error.ManyMergeDestAbort(msg, hint=hint) |
293 elif len(bmheads) <= 1: | 293 elif len(bmheads) <= 1: |
294 msg, hint = msgdestmerge['nootherbookmarks'][action] | 294 msg, hint = msgdestmerge[b'nootherbookmarks'][action] |
295 raise error.NoMergeDestAbort(msg, hint=hint) | 295 raise error.NoMergeDestAbort(msg, hint=hint) |
296 assert node is not None | 296 assert node is not None |
297 return node | 297 return node |
298 | 298 |
299 | 299 |
300 def _destmergebranch( | 300 def _destmergebranch( |
301 repo, action='merge', sourceset=None, onheadcheck=True, destspace=None | 301 repo, action=b'merge', sourceset=None, onheadcheck=True, destspace=None |
302 ): | 302 ): |
303 """find merge destination based on branch heads""" | 303 """find merge destination based on branch heads""" |
304 node = None | 304 node = None |
305 | 305 |
306 if sourceset is None: | 306 if sourceset is None: |
307 sourceset = [repo[repo.dirstate.p1()].rev()] | 307 sourceset = [repo[repo.dirstate.p1()].rev()] |
308 branch = repo.dirstate.branch() | 308 branch = repo.dirstate.branch() |
309 elif not sourceset: | 309 elif not sourceset: |
310 msg, hint = msgdestmerge['emptysourceset'][action] | 310 msg, hint = msgdestmerge[b'emptysourceset'][action] |
311 raise error.NoMergeDestAbort(msg, hint=hint) | 311 raise error.NoMergeDestAbort(msg, hint=hint) |
312 else: | 312 else: |
313 branch = None | 313 branch = None |
314 for ctx in repo.set('roots(%ld::%ld)', sourceset, sourceset): | 314 for ctx in repo.set(b'roots(%ld::%ld)', sourceset, sourceset): |
315 if branch is not None and ctx.branch() != branch: | 315 if branch is not None and ctx.branch() != branch: |
316 msg, hint = msgdestmerge['multiplebranchessourceset'][action] | 316 msg, hint = msgdestmerge[b'multiplebranchessourceset'][action] |
317 raise error.ManyMergeDestAbort(msg, hint=hint) | 317 raise error.ManyMergeDestAbort(msg, hint=hint) |
318 branch = ctx.branch() | 318 branch = ctx.branch() |
319 | 319 |
320 bheads = repo.branchheads(branch) | 320 bheads = repo.branchheads(branch) |
321 onhead = repo.revs('%ld and %ln', sourceset, bheads) | 321 onhead = repo.revs(b'%ld and %ln', sourceset, bheads) |
322 if onheadcheck and not onhead: | 322 if onheadcheck and not onhead: |
323 # Case A: working copy if not on a head. (merge only) | 323 # Case A: working copy if not on a head. (merge only) |
324 # | 324 # |
325 # This is probably a user mistake We bailout pointing at 'hg update' | 325 # This is probably a user mistake We bailout pointing at 'hg update' |
326 if len(repo.heads()) <= 1: | 326 if len(repo.heads()) <= 1: |
327 msg, hint = msgdestmerge['nootherheadsbehind'][action] | 327 msg, hint = msgdestmerge[b'nootherheadsbehind'][action] |
328 else: | 328 else: |
329 msg, hint = msgdestmerge['notatheads'][action] | 329 msg, hint = msgdestmerge[b'notatheads'][action] |
330 raise error.Abort(msg, hint=hint) | 330 raise error.Abort(msg, hint=hint) |
331 # remove heads descendants of source from the set | 331 # remove heads descendants of source from the set |
332 bheads = list(repo.revs('%ln - (%ld::)', bheads, sourceset)) | 332 bheads = list(repo.revs(b'%ln - (%ld::)', bheads, sourceset)) |
333 # filters out bookmarked heads | 333 # filters out bookmarked heads |
334 nbhs = list(repo.revs('%ld - bookmark()', bheads)) | 334 nbhs = list(repo.revs(b'%ld - bookmark()', bheads)) |
335 | 335 |
336 if destspace is not None: | 336 if destspace is not None: |
337 # restrict search space | 337 # restrict search space |
338 # used in the 'hg pull --rebase' case, see issue 5214. | 338 # used in the 'hg pull --rebase' case, see issue 5214. |
339 nbhs = list(repo.revs('%ld and %ld', destspace, nbhs)) | 339 nbhs = list(repo.revs(b'%ld and %ld', destspace, nbhs)) |
340 | 340 |
341 if len(nbhs) > 1: | 341 if len(nbhs) > 1: |
342 # Case B: There is more than 1 other anonymous heads | 342 # Case B: There is more than 1 other anonymous heads |
343 # | 343 # |
344 # This means that there will be more than 1 candidate. This is | 344 # This means that there will be more than 1 candidate. This is |
345 # ambiguous. We abort asking the user to pick as explicit destination | 345 # ambiguous. We abort asking the user to pick as explicit destination |
346 # instead. | 346 # instead. |
347 msg, hint = msgdestmerge['toomanyheads'][action] | 347 msg, hint = msgdestmerge[b'toomanyheads'][action] |
348 msg %= (branch, len(bheads) + 1) | 348 msg %= (branch, len(bheads) + 1) |
349 raise error.ManyMergeDestAbort(msg, hint=hint) | 349 raise error.ManyMergeDestAbort(msg, hint=hint) |
350 elif not nbhs: | 350 elif not nbhs: |
351 # Case B: There is no other anonymous heads | 351 # Case B: There is no other anonymous heads |
352 # | 352 # |
353 # This means that there is no natural candidate to merge with. | 353 # This means that there is no natural candidate to merge with. |
354 # We abort, with various messages for various cases. | 354 # We abort, with various messages for various cases. |
355 if bheads: | 355 if bheads: |
356 msg, hint = msgdestmerge['bookmarkedheads'][action] | 356 msg, hint = msgdestmerge[b'bookmarkedheads'][action] |
357 elif len(repo.heads()) > 1: | 357 elif len(repo.heads()) > 1: |
358 msg, hint = msgdestmerge['nootherbranchheads'][action] | 358 msg, hint = msgdestmerge[b'nootherbranchheads'][action] |
359 msg %= branch | 359 msg %= branch |
360 elif not onhead: | 360 elif not onhead: |
361 # if 'onheadcheck == False' (rebase case), | 361 # if 'onheadcheck == False' (rebase case), |
362 # this was not caught in Case A. | 362 # this was not caught in Case A. |
363 msg, hint = msgdestmerge['nootherheadsbehind'][action] | 363 msg, hint = msgdestmerge[b'nootherheadsbehind'][action] |
364 else: | 364 else: |
365 msg, hint = msgdestmerge['nootherheads'][action] | 365 msg, hint = msgdestmerge[b'nootherheads'][action] |
366 raise error.NoMergeDestAbort(msg, hint=hint) | 366 raise error.NoMergeDestAbort(msg, hint=hint) |
367 else: | 367 else: |
368 node = nbhs[0] | 368 node = nbhs[0] |
369 assert node is not None | 369 assert node is not None |
370 return node | 370 return node |
371 | 371 |
372 | 372 |
373 def destmerge( | 373 def destmerge( |
374 repo, action='merge', sourceset=None, onheadcheck=True, destspace=None | 374 repo, action=b'merge', sourceset=None, onheadcheck=True, destspace=None |
375 ): | 375 ): |
376 """return the default destination for a merge | 376 """return the default destination for a merge |
377 | 377 |
378 (or raise exception about why it can't pick one) | 378 (or raise exception about why it can't pick one) |
379 | 379 |
396 return repo[node].rev() | 396 return repo[node].rev() |
397 | 397 |
398 | 398 |
399 def desthistedit(ui, repo): | 399 def desthistedit(ui, repo): |
400 """Default base revision to edit for `hg histedit`.""" | 400 """Default base revision to edit for `hg histedit`.""" |
401 default = ui.config('histedit', 'defaultrev') | 401 default = ui.config(b'histedit', b'defaultrev') |
402 | 402 |
403 if default is None: | 403 if default is None: |
404 revs = stack.getstack(repo) | 404 revs = stack.getstack(repo) |
405 elif default: | 405 elif default: |
406 revs = scmutil.revrange(repo, [default]) | 406 revs = scmutil.revrange(repo, [default]) |
407 else: | 407 else: |
408 raise error.Abort(_("config option histedit.defaultrev can't be empty")) | 408 raise error.Abort( |
409 _(b"config option histedit.defaultrev can't be empty") | |
410 ) | |
409 | 411 |
410 if revs: | 412 if revs: |
411 # Take the first revision of the revset as the root | 413 # Take the first revision of the revset as the root |
412 return revs.min() | 414 return revs.min() |
413 | 415 |
420 | 422 |
421 | 423 |
422 def _statusotherbook(ui, repo): | 424 def _statusotherbook(ui, repo): |
423 bmheads = bookmarks.headsforactive(repo) | 425 bmheads = bookmarks.headsforactive(repo) |
424 curhead = repo._bookmarks[repo._activebookmark] | 426 curhead = repo._bookmarks[repo._activebookmark] |
425 if repo.revs('%n and parents()', curhead): | 427 if repo.revs(b'%n and parents()', curhead): |
426 # we are on the active bookmark | 428 # we are on the active bookmark |
427 bmheads = [b for b in bmheads if curhead != b] | 429 bmheads = [b for b in bmheads if curhead != b] |
428 if bmheads: | 430 if bmheads: |
429 msg = _('%i other divergent bookmarks for "%s"\n') | 431 msg = _(b'%i other divergent bookmarks for "%s"\n') |
430 ui.status(msg % (len(bmheads), repo._activebookmark)) | 432 ui.status(msg % (len(bmheads), repo._activebookmark)) |
431 | 433 |
432 | 434 |
433 def _statusotherbranchheads(ui, repo): | 435 def _statusotherbranchheads(ui, repo): |
434 currentbranch = repo.dirstate.branch() | 436 currentbranch = repo.dirstate.branch() |
435 allheads = repo.branchheads(currentbranch, closed=True) | 437 allheads = repo.branchheads(currentbranch, closed=True) |
436 heads = repo.branchheads(currentbranch) | 438 heads = repo.branchheads(currentbranch) |
437 if repo.revs('%ln and parents()', allheads): | 439 if repo.revs(b'%ln and parents()', allheads): |
438 # we are on a head, even though it might be closed | 440 # we are on a head, even though it might be closed |
439 # | 441 # |
440 # on closed otherheads | 442 # on closed otherheads |
441 # ========= ========== | 443 # ========= ========== |
442 # o 0 all heads for current branch are closed | 444 # o 0 all heads for current branch are closed |
443 # N only descendant branch heads are closed | 445 # N only descendant branch heads are closed |
444 # x 0 there is only one non-closed branch head | 446 # x 0 there is only one non-closed branch head |
445 # N there are some non-closed branch heads | 447 # N there are some non-closed branch heads |
446 # ========= ========== | 448 # ========= ========== |
447 otherheads = repo.revs('%ln - parents()', heads) | 449 otherheads = repo.revs(b'%ln - parents()', heads) |
448 if repo['.'].closesbranch(): | 450 if repo[b'.'].closesbranch(): |
449 ui.warn( | 451 ui.warn( |
450 _( | 452 _( |
451 'no open descendant heads on branch "%s", ' | 453 b'no open descendant heads on branch "%s", ' |
452 'updating to a closed head\n' | 454 b'updating to a closed head\n' |
453 ) | 455 ) |
454 % currentbranch | 456 % currentbranch |
455 ) | 457 ) |
456 if otherheads: | 458 if otherheads: |
457 ui.warn( | 459 ui.warn( |
458 _( | 460 _( |
459 "(committing will reopen the head, " | 461 b"(committing will reopen the head, " |
460 "use 'hg heads .' to see %i other heads)\n" | 462 b"use 'hg heads .' to see %i other heads)\n" |
461 ) | 463 ) |
462 % (len(otherheads)) | 464 % (len(otherheads)) |
463 ) | 465 ) |
464 else: | 466 else: |
465 ui.warn( | 467 ui.warn( |
466 _('(committing will reopen branch "%s")\n') % currentbranch | 468 _(b'(committing will reopen branch "%s")\n') % currentbranch |
467 ) | 469 ) |
468 elif otherheads: | 470 elif otherheads: |
469 curhead = repo['.'] | 471 curhead = repo[b'.'] |
470 ui.status( | 472 ui.status( |
471 _('updated to "%s: %s"\n') | 473 _(b'updated to "%s: %s"\n') |
472 % (curhead, curhead.description().split('\n')[0]) | 474 % (curhead, curhead.description().split(b'\n')[0]) |
473 ) | 475 ) |
474 ui.status( | 476 ui.status( |
475 _('%i other heads for branch "%s"\n') | 477 _(b'%i other heads for branch "%s"\n') |
476 % (len(otherheads), currentbranch) | 478 % (len(otherheads), currentbranch) |
477 ) | 479 ) |
478 | 480 |
479 | 481 |
480 def statusotherdests(ui, repo): | 482 def statusotherdests(ui, repo): |