comparison hgext/rebase.py @ 26587:56b2bcea2529

error: get Abort from 'error' instead of 'util' The home of 'Abort' is 'error' not 'util' however, a lot of code seems to be confused about that and gives all the credit to 'util' instead of the hardworking 'error'. In a spirit of equity, we break the cycle of injustice and give back to 'error' the respect it deserves. And screw that 'util' poser. For great justice.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Thu, 08 Oct 2015 12:55:45 -0700
parents b885ab9ca182
children 07db7e95c464
comparison
equal deleted inserted replaced
26586:d51c658d3f04 26587:56b2bcea2529
223 except KeyError: 223 except KeyError:
224 enablehistedit = " --config extensions.histedit=" 224 enablehistedit = " --config extensions.histedit="
225 help = "hg%s help -e histedit" % enablehistedit 225 help = "hg%s help -e histedit" % enablehistedit
226 msg = _("interactive history editing is supported by the " 226 msg = _("interactive history editing is supported by the "
227 "'histedit' extension (see \"%s\")") % help 227 "'histedit' extension (see \"%s\")") % help
228 raise util.Abort(msg) 228 raise error.Abort(msg)
229 229
230 if collapsemsg and not collapsef: 230 if collapsemsg and not collapsef:
231 raise util.Abort( 231 raise error.Abort(
232 _('message can only be specified with collapse')) 232 _('message can only be specified with collapse'))
233 233
234 if contf or abortf: 234 if contf or abortf:
235 if contf and abortf: 235 if contf and abortf:
236 raise util.Abort(_('cannot use both abort and continue')) 236 raise error.Abort(_('cannot use both abort and continue'))
237 if collapsef: 237 if collapsef:
238 raise util.Abort( 238 raise error.Abort(
239 _('cannot use collapse with continue or abort')) 239 _('cannot use collapse with continue or abort'))
240 if srcf or basef or destf: 240 if srcf or basef or destf:
241 raise util.Abort( 241 raise error.Abort(
242 _('abort and continue do not allow specifying revisions')) 242 _('abort and continue do not allow specifying revisions'))
243 if abortf and opts.get('tool', False): 243 if abortf and opts.get('tool', False):
244 ui.warn(_('tool option will be ignored\n')) 244 ui.warn(_('tool option will be ignored\n'))
245 245
246 try: 246 try:
253 ' only broken state is cleared)\n')) 253 ' only broken state is cleared)\n'))
254 return 0 254 return 0
255 else: 255 else:
256 msg = _('cannot continue inconsistent rebase') 256 msg = _('cannot continue inconsistent rebase')
257 hint = _('use "hg rebase --abort" to clear broken state') 257 hint = _('use "hg rebase --abort" to clear broken state')
258 raise util.Abort(msg, hint=hint) 258 raise error.Abort(msg, hint=hint)
259 if abortf: 259 if abortf:
260 return abort(repo, originalwd, target, state, 260 return abort(repo, originalwd, target, state,
261 activebookmark=activebookmark) 261 activebookmark=activebookmark)
262 else: 262 else:
263 if srcf and basef: 263 if srcf and basef:
264 raise util.Abort(_('cannot specify both a ' 264 raise error.Abort(_('cannot specify both a '
265 'source and a base')) 265 'source and a base'))
266 if revf and basef: 266 if revf and basef:
267 raise util.Abort(_('cannot specify both a ' 267 raise error.Abort(_('cannot specify both a '
268 'revision and a base')) 268 'revision and a base'))
269 if revf and srcf: 269 if revf and srcf:
270 raise util.Abort(_('cannot specify both a ' 270 raise error.Abort(_('cannot specify both a '
271 'revision and a source')) 271 'revision and a source'))
272 272
273 cmdutil.checkunfinished(repo) 273 cmdutil.checkunfinished(repo)
274 cmdutil.bailifchanged(repo) 274 cmdutil.bailifchanged(repo)
275 275
333 333
334 allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) 334 allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt)
335 if (not (keepf or allowunstable) 335 if (not (keepf or allowunstable)
336 and repo.revs('first(children(%ld) - %ld)', 336 and repo.revs('first(children(%ld) - %ld)',
337 rebaseset, rebaseset)): 337 rebaseset, rebaseset)):
338 raise util.Abort( 338 raise error.Abort(
339 _("can't remove original changesets with" 339 _("can't remove original changesets with"
340 " unrebased descendants"), 340 " unrebased descendants"),
341 hint=_('use --keep to keep original changesets')) 341 hint=_('use --keep to keep original changesets'))
342 342
343 obsoletenotrebased = {} 343 obsoletenotrebased = {}
359 ui.status(_('nothing to rebase\n')) 359 ui.status(_('nothing to rebase\n'))
360 return 1 360 return 1
361 361
362 root = min(rebaseset) 362 root = min(rebaseset)
363 if not keepf and not repo[root].mutable(): 363 if not keepf and not repo[root].mutable():
364 raise util.Abort(_("can't rebase public changeset %s") 364 raise error.Abort(_("can't rebase public changeset %s")
365 % repo[root], 365 % repo[root],
366 hint=_('see "hg help phases" for details')) 366 hint=_('see "hg help phases" for details'))
367 367
368 originalwd, target, state = result 368 originalwd, target, state = result
369 if collapsef: 369 if collapsef:
382 if collapsef: 382 if collapsef:
383 branches = set() 383 branches = set()
384 for rev in state: 384 for rev in state:
385 branches.add(repo[rev].branch()) 385 branches.add(repo[rev].branch())
386 if len(branches) > 1: 386 if len(branches) > 1:
387 raise util.Abort(_('cannot collapse multiple named ' 387 raise error.Abort(_('cannot collapse multiple named '
388 'branches')) 388 'branches'))
389 389
390 # Rebase 390 # Rebase
391 if not targetancestors: 391 if not targetancestors:
392 targetancestors = repo.changelog.ancestors([target], inclusive=True) 392 targetancestors = repo.changelog.ancestors([target], inclusive=True)
562 parents.add(p.rev()) 562 parents.add(p.rev())
563 if not parents: 563 if not parents:
564 return nullrev 564 return nullrev
565 if len(parents) == 1: 565 if len(parents) == 1:
566 return parents.pop() 566 return parents.pop()
567 raise util.Abort(_('unable to collapse on top of %s, there is more ' 567 raise error.Abort(_('unable to collapse on top of %s, there is more '
568 'than one external parent: %s') % 568 'than one external parent: %s') %
569 (max(targetancestors), 569 (max(targetancestors),
570 ', '.join(str(p) for p in sorted(parents)))) 570 ', '.join(str(p) for p in sorted(parents))))
571 571
572 def concludenode(repo, rev, p1, p2, commitmsg=None, editor=None, extrafn=None, 572 def concludenode(repo, rev, p1, p2, commitmsg=None, editor=None, extrafn=None,
675 p2 = target 675 p2 = target
676 else: 676 else:
677 p2 = state[p2n] 677 p2 = state[p2n]
678 else: # p2n external 678 else: # p2n external
679 if p2 != nullrev: # p1n external too => rev is a merged revision 679 if p2 != nullrev: # p1n external too => rev is a merged revision
680 raise util.Abort(_('cannot use revision %d as base, result ' 680 raise error.Abort(_('cannot use revision %d as base, result '
681 'would have 3 parents') % rev) 681 'would have 3 parents') % rev)
682 p2 = p2n 682 p2 = p2n
683 repo.ui.debug(" future parents are %d and %d\n" % 683 repo.ui.debug(" future parents are %d and %d\n" %
684 (repo[p1].rev(), repo[p2].rev())) 684 (repo[p1].rev(), repo[p2].rev()))
685 685
864 # Legacy compat special case 864 # Legacy compat special case
865 else: 865 else:
866 state[repo[oldrev].rev()] = repo[newrev].rev() 866 state[repo[oldrev].rev()] = repo[newrev].rev()
867 867
868 if keepbranches is None: 868 if keepbranches is None:
869 raise util.Abort(_('.hg/rebasestate is incomplete')) 869 raise error.Abort(_('.hg/rebasestate is incomplete'))
870 870
871 skipped = set() 871 skipped = set()
872 # recompute the set of skipped revs 872 # recompute the set of skipped revs
873 if not collapse: 873 if not collapse:
874 seen = set([target]) 874 seen = set([target])
883 return (originalwd, target, state, skipped, 883 return (originalwd, target, state, skipped,
884 collapse, keep, keepbranches, external, activebookmark) 884 collapse, keep, keepbranches, external, activebookmark)
885 except IOError as err: 885 except IOError as err:
886 if err.errno != errno.ENOENT: 886 if err.errno != errno.ENOENT:
887 raise 887 raise
888 raise util.Abort(_('no rebase in progress')) 888 raise error.Abort(_('no rebase in progress'))
889 889
890 def needupdate(repo, state): 890 def needupdate(repo, state):
891 '''check whether we should `update --clean` away from a merge, or if 891 '''check whether we should `update --clean` away from a merge, or if
892 somehow the working dir got forcibly updated, e.g. by older hg''' 892 somehow the working dir got forcibly updated, e.g. by older hg'''
893 parents = [p.rev() for p in repo.parents()] 893 parents = [p.rev() for p in repo.parents()]
957 # This check isn't strictly necessary, since mq detects commits over an 957 # This check isn't strictly necessary, since mq detects commits over an
958 # applied patch. But it prevents messing up the working directory when 958 # applied patch. But it prevents messing up the working directory when
959 # a partially completed rebase is blocked by mq. 959 # a partially completed rebase is blocked by mq.
960 if 'qtip' in repo.tags() and (dest.node() in 960 if 'qtip' in repo.tags() and (dest.node() in
961 [s.node for s in repo.mq.applied]): 961 [s.node for s in repo.mq.applied]):
962 raise util.Abort(_('cannot rebase onto an applied mq patch')) 962 raise error.Abort(_('cannot rebase onto an applied mq patch'))
963 963
964 roots = list(repo.set('roots(%ld)', rebaseset)) 964 roots = list(repo.set('roots(%ld)', rebaseset))
965 if not roots: 965 if not roots:
966 raise util.Abort(_('no matching revisions')) 966 raise error.Abort(_('no matching revisions'))
967 roots.sort() 967 roots.sort()
968 state = {} 968 state = {}
969 detachset = set() 969 detachset = set()
970 for root in roots: 970 for root in roots:
971 commonbase = root.ancestor(dest) 971 commonbase = root.ancestor(dest)
972 if commonbase == root: 972 if commonbase == root:
973 raise util.Abort(_('source is ancestor of destination')) 973 raise error.Abort(_('source is ancestor of destination'))
974 if commonbase == dest: 974 if commonbase == dest:
975 samebranch = root.branch() == dest.branch() 975 samebranch = root.branch() == dest.branch()
976 if not collapse and samebranch and root in dest.children(): 976 if not collapse and samebranch and root in dest.children():
977 repo.ui.debug('source is a child of destination\n') 977 repo.ui.debug('source is a child of destination\n')
978 return None 978 return None
1112 % repo._activebookmark) 1112 % repo._activebookmark)
1113 finally: 1113 finally:
1114 release(lock, wlock) 1114 release(lock, wlock)
1115 else: 1115 else:
1116 if opts.get('tool'): 1116 if opts.get('tool'):
1117 raise util.Abort(_('--tool can only be used with --rebase')) 1117 raise error.Abort(_('--tool can only be used with --rebase'))
1118 orig(ui, repo, *args, **opts) 1118 orig(ui, repo, *args, **opts)
1119 1119
1120 def _setrebasesetvisibility(repo, revs): 1120 def _setrebasesetvisibility(repo, revs):
1121 """store the currently rebased set on the repo object 1121 """store the currently rebased set on the repo object
1122 1122