mercurial/commands.py
branchstable
changeset 16470 b2e1da5db6df
parent 16458 55982f62651f
child 16471 85c7602e283a
equal deleted inserted replaced
16469:dd68c972d089 16470:b2e1da5db6df
   447         if opts.get('parent'):
   447         if opts.get('parent'):
   448             raise util.Abort(_('cannot use --parent on non-merge changeset'))
   448             raise util.Abort(_('cannot use --parent on non-merge changeset'))
   449         parent = p1
   449         parent = p1
   450 
   450 
   451     # the backout should appear on the same branch
   451     # the backout should appear on the same branch
   452     branch = repo.dirstate.branch()
   452     wlock = repo.wlock()
   453     hg.clean(repo, node, show_stats=False)
   453     try:
   454     repo.dirstate.setbranch(branch)
   454         branch = repo.dirstate.branch()
   455     revert_opts = opts.copy()
   455         hg.clean(repo, node, show_stats=False)
   456     revert_opts['date'] = None
   456         repo.dirstate.setbranch(branch)
   457     revert_opts['all'] = True
   457         revert_opts = opts.copy()
   458     revert_opts['rev'] = hex(parent)
   458         revert_opts['date'] = None
   459     revert_opts['no_backup'] = None
   459         revert_opts['all'] = True
   460     revert(ui, repo, **revert_opts)
   460         revert_opts['rev'] = hex(parent)
   461     if not opts.get('merge') and op1 != node:
   461         revert_opts['no_backup'] = None
   462         try:
   462         revert(ui, repo, **revert_opts)
   463             ui.setconfig('ui', 'forcemerge', opts.get('tool', ''))
   463         if not opts.get('merge') and op1 != node:
   464             return hg.update(repo, op1)
   464             try:
   465         finally:
   465                 ui.setconfig('ui', 'forcemerge', opts.get('tool', ''))
   466             ui.setconfig('ui', 'forcemerge', '')
   466                 return hg.update(repo, op1)
   467 
   467             finally:
   468     commit_opts = opts.copy()
   468                 ui.setconfig('ui', 'forcemerge', '')
   469     commit_opts['addremove'] = False
   469 
   470     if not commit_opts['message'] and not commit_opts['logfile']:
   470         commit_opts = opts.copy()
   471         # we don't translate commit messages
   471         commit_opts['addremove'] = False
   472         commit_opts['message'] = "Backed out changeset %s" % short(node)
   472         if not commit_opts['message'] and not commit_opts['logfile']:
   473         commit_opts['force_editor'] = True
   473             # we don't translate commit messages
   474     commit(ui, repo, **commit_opts)
   474             commit_opts['message'] = "Backed out changeset %s" % short(node)
   475     def nice(node):
   475             commit_opts['force_editor'] = True
   476         return '%d:%s' % (repo.changelog.rev(node), short(node))
   476         commit(ui, repo, **commit_opts)
   477     ui.status(_('changeset %s backs out changeset %s\n') %
   477         def nice(node):
   478               (nice(repo.changelog.tip()), nice(node)))
   478             return '%d:%s' % (repo.changelog.rev(node), short(node))
   479     if opts.get('merge') and op1 != node:
   479         ui.status(_('changeset %s backs out changeset %s\n') %
   480         hg.clean(repo, op1, show_stats=False)
   480                   (nice(repo.changelog.tip()), nice(node)))
   481         ui.status(_('merging with changeset %s\n')
   481         if opts.get('merge') and op1 != node:
   482                   % nice(repo.changelog.tip()))
   482             hg.clean(repo, op1, show_stats=False)
   483         try:
   483             ui.status(_('merging with changeset %s\n')
   484             ui.setconfig('ui', 'forcemerge', opts.get('tool', ''))
   484                       % nice(repo.changelog.tip()))
   485             return hg.merge(repo, hex(repo.changelog.tip()))
   485             try:
   486         finally:
   486                 ui.setconfig('ui', 'forcemerge', opts.get('tool', ''))
   487             ui.setconfig('ui', 'forcemerge', '')
   487                 return hg.merge(repo, hex(repo.changelog.tip()))
       
   488             finally:
       
   489                 ui.setconfig('ui', 'forcemerge', '')
       
   490     finally:
       
   491         wlock.release()
   488     return 0
   492     return 0
   489 
   493 
   490 @command('bisect',
   494 @command('bisect',
   491     [('r', 'reset', False, _('reset bisect state')),
   495     [('r', 'reset', False, _('reset bisect state')),
   492     ('g', 'good', False, _('mark changeset good')),
   496     ('g', 'good', False, _('mark changeset good')),