comparison mercurial/commands.py @ 39392:5d00e6061ba2

resolve: add a flag for the default behavior of re-merging On its own, it's not useful, but the next commit will add an hgrc config option to make it mandatory. There is no short option, as -r almost always means --rev and this option doesn't seem like it would be so common as to mandate a short option. Differential Revision: https://phab.mercurial-scm.org/D4378
author Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
date Sun, 26 Aug 2018 15:52:34 -0400
parents 46f3ff64bea7
children 56469d475341
comparison
equal deleted inserted replaced
39391:3d8b73c0fadf 39392:5d00e6061ba2
4504 @command('resolve', 4504 @command('resolve',
4505 [('a', 'all', None, _('select all unresolved files')), 4505 [('a', 'all', None, _('select all unresolved files')),
4506 ('l', 'list', None, _('list state of files needing merge')), 4506 ('l', 'list', None, _('list state of files needing merge')),
4507 ('m', 'mark', None, _('mark files as resolved')), 4507 ('m', 'mark', None, _('mark files as resolved')),
4508 ('u', 'unmark', None, _('mark files as unresolved')), 4508 ('u', 'unmark', None, _('mark files as unresolved')),
4509 ('n', 'no-status', None, _('hide status prefix'))] 4509 ('n', 'no-status', None, _('hide status prefix')),
4510 ('', 're-merge', None, _('re-merge files'))]
4510 + mergetoolopts + walkopts + formatteropts, 4511 + mergetoolopts + walkopts + formatteropts,
4511 _('[OPTION]... [FILE]...'), 4512 _('[OPTION]... [FILE]...'),
4512 inferrepo=True) 4513 inferrepo=True)
4513 def resolve(ui, repo, *pats, **opts): 4514 def resolve(ui, repo, *pats, **opts):
4514 """redo merges or set/view the merge status of files 4515 """redo merges or set/view the merge status of files
4521 working directory must have two parents). See :hg:`help 4522 working directory must have two parents). See :hg:`help
4522 merge-tools` for information on configuring merge tools. 4523 merge-tools` for information on configuring merge tools.
4523 4524
4524 The resolve command can be used in the following ways: 4525 The resolve command can be used in the following ways:
4525 4526
4526 - :hg:`resolve [--tool TOOL] FILE...`: attempt to re-merge the specified 4527 - :hg:`resolve [--re-merge] [--tool TOOL] FILE...`: attempt to re-merge
4527 files, discarding any previous merge attempts. Re-merging is not 4528 the specified files, discarding any previous merge attempts. Re-merging
4528 performed for files already marked as resolved. Use ``--all/-a`` 4529 is not performed for files already marked as resolved. Use ``--all/-a``
4529 to select all unresolved files. ``--tool`` can be used to specify 4530 to select all unresolved files. ``--tool`` can be used to specify
4530 the merge tool used for the given files. It overrides the HGMERGE 4531 the merge tool used for the given files. It overrides the HGMERGE
4531 environment variable and your configuration files. Previous file 4532 environment variable and your configuration files. Previous file
4532 contents are saved with a ``.orig`` suffix. 4533 contents are saved with a ``.orig`` suffix.
4533 4534
4552 Returns 0 on success, 1 if any files fail a resolve attempt. 4553 Returns 0 on success, 1 if any files fail a resolve attempt.
4553 """ 4554 """
4554 4555
4555 opts = pycompat.byteskwargs(opts) 4556 opts = pycompat.byteskwargs(opts)
4556 confirm = ui.configbool('commands', 'resolve.confirm') 4557 confirm = ui.configbool('commands', 'resolve.confirm')
4557 flaglist = 'all mark unmark list no_status'.split() 4558 flaglist = 'all mark unmark list no_status re_merge'.split()
4558 all, mark, unmark, show, nostatus = \ 4559 all, mark, unmark, show, nostatus, remerge = \
4559 [opts.get(o) for o in flaglist] 4560 [opts.get(o) for o in flaglist]
4560 4561
4561 if len(list(filter(None, [show, mark, unmark]))) > 1: 4562 if len(list(filter(None, [show, mark, unmark, remerge]))) > 1:
4562 raise error.Abort(_("too many options specified")) 4563 raise error.Abort(_("too many options specified"))
4563 if pats and all: 4564 if pats and all:
4564 raise error.Abort(_("can't specify --all and patterns")) 4565 raise error.Abort(_("can't specify --all and patterns"))
4565 if not (all or pats or show or mark or unmark): 4566 if not (all or pats or show or mark or unmark):
4566 raise error.Abort(_('no files or directories specified'), 4567 raise error.Abort(_('no files or directories specified'),
4750 pats = ['path:%s' % p for p in pats] 4751 pats = ['path:%s' % p for p in pats]
4751 m = scmutil.match(wctx, pats, opts) 4752 m = scmutil.match(wctx, pats, opts)
4752 for f in ms: 4753 for f in ms:
4753 if not m(f): 4754 if not m(f):
4754 continue 4755 continue
4755 flags = ''.join(['-%s ' % o[0:1] for o in flaglist 4756 def flag(o):
4756 if opts.get(o)]) 4757 if o == 're_merge':
4758 return '--re-merge '
4759 return '-%s ' % o[0:1]
4760 flags = ''.join([flag(o) for o in flaglist if opts.get(o)])
4757 hint = _("(try: hg resolve %s%s)\n") % ( 4761 hint = _("(try: hg resolve %s%s)\n") % (
4758 flags, 4762 flags,
4759 ' '.join(pats)) 4763 ' '.join(pats))
4760 break 4764 break
4761 ui.warn(_("arguments do not match paths that need resolving\n")) 4765 ui.warn(_("arguments do not match paths that need resolving\n"))