comparison mercurial/commands.py @ 48118:5105a9975407

errors: raise InputError from revsingle() iff revset provided by the user Same reasoning as for `revrange()` in an earlier patch. Differential Revision: https://phab.mercurial-scm.org/D11562
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 28 Sep 2021 15:11:22 -0700
parents b74e128676d4
children 607e9322fc89
comparison
equal deleted inserted replaced
48117:b74e128676d4 48118:5105a9975407
443 raise error.InputError(_(b'at least one of -n/-c is required for -l')) 443 raise error.InputError(_(b'at least one of -n/-c is required for -l'))
444 444
445 rev = opts.get(b'rev') 445 rev = opts.get(b'rev')
446 if rev: 446 if rev:
447 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn') 447 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
448 ctx = scmutil.revsingle(repo, rev) 448 ctx = logcmdutil.revsingle(repo, rev)
449 449
450 ui.pager(b'annotate') 450 ui.pager(b'annotate')
451 rootfm = ui.formatter(b'annotate', opts) 451 rootfm = ui.formatter(b'annotate', opts)
452 if ui.debugflag: 452 if ui.debugflag:
453 shorthex = pycompat.identity 453 shorthex = pycompat.identity
647 647
648 opts = pycompat.byteskwargs(opts) 648 opts = pycompat.byteskwargs(opts)
649 rev = opts.get(b'rev') 649 rev = opts.get(b'rev')
650 if rev: 650 if rev:
651 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn') 651 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
652 ctx = scmutil.revsingle(repo, rev) 652 ctx = logcmdutil.revsingle(repo, rev)
653 if not ctx: 653 if not ctx:
654 raise error.InputError( 654 raise error.InputError(
655 _(b'no working directory: please specify a revision') 655 _(b'no working directory: please specify a revision')
656 ) 656 )
657 node = ctx.node() 657 node = ctx.node()
789 if date: 789 if date:
790 opts[b'date'] = dateutil.parsedate(date) 790 opts[b'date'] = dateutil.parsedate(date)
791 791
792 cmdutil.checkunfinished(repo) 792 cmdutil.checkunfinished(repo)
793 cmdutil.bailifchanged(repo) 793 cmdutil.bailifchanged(repo)
794 ctx = scmutil.revsingle(repo, rev) 794 ctx = logcmdutil.revsingle(repo, rev)
795 node = ctx.node() 795 node = ctx.node()
796 796
797 op1, op2 = repo.dirstate.parents() 797 op1, op2 = repo.dirstate.parents()
798 if not repo.changelog.isancestor(node, op1): 798 if not repo.changelog.isancestor(node, op1):
799 raise error.InputError( 799 raise error.InputError(
1759 """ 1759 """
1760 opts = pycompat.byteskwargs(opts) 1760 opts = pycompat.byteskwargs(opts)
1761 rev = opts.get(b'rev') 1761 rev = opts.get(b'rev')
1762 if rev: 1762 if rev:
1763 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn') 1763 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
1764 ctx = scmutil.revsingle(repo, rev) 1764 ctx = logcmdutil.revsingle(repo, rev)
1765 m = scmutil.match(ctx, (file1,) + pats, opts) 1765 m = scmutil.match(ctx, (file1,) + pats, opts)
1766 fntemplate = opts.pop(b'output', b'') 1766 fntemplate = opts.pop(b'output', b'')
1767 if cmdutil.isstdiofilename(fntemplate): 1767 if cmdutil.isstdiofilename(fntemplate):
1768 fntemplate = b'' 1768 fntemplate = b''
1769 1769
2598 2598
2599 cmdutil.check_incompatible_arguments(opts, b'from', [b'rev', b'change']) 2599 cmdutil.check_incompatible_arguments(opts, b'from', [b'rev', b'change'])
2600 cmdutil.check_incompatible_arguments(opts, b'to', [b'rev', b'change']) 2600 cmdutil.check_incompatible_arguments(opts, b'to', [b'rev', b'change'])
2601 if change: 2601 if change:
2602 repo = scmutil.unhidehashlikerevs(repo, [change], b'nowarn') 2602 repo = scmutil.unhidehashlikerevs(repo, [change], b'nowarn')
2603 ctx2 = scmutil.revsingle(repo, change, None) 2603 ctx2 = logcmdutil.revsingle(repo, change, None)
2604 ctx1 = logcmdutil.diff_parent(ctx2) 2604 ctx1 = logcmdutil.diff_parent(ctx2)
2605 elif from_rev or to_rev: 2605 elif from_rev or to_rev:
2606 repo = scmutil.unhidehashlikerevs( 2606 repo = scmutil.unhidehashlikerevs(
2607 repo, [from_rev] + [to_rev], b'nowarn' 2607 repo, [from_rev] + [to_rev], b'nowarn'
2608 ) 2608 )
2609 ctx1 = scmutil.revsingle(repo, from_rev, None) 2609 ctx1 = logcmdutil.revsingle(repo, from_rev, None)
2610 ctx2 = scmutil.revsingle(repo, to_rev, None) 2610 ctx2 = logcmdutil.revsingle(repo, to_rev, None)
2611 else: 2611 else:
2612 repo = scmutil.unhidehashlikerevs(repo, revs, b'nowarn') 2612 repo = scmutil.unhidehashlikerevs(repo, revs, b'nowarn')
2613 ctx1, ctx2 = logcmdutil.revpair(repo, revs) 2613 ctx1, ctx2 = logcmdutil.revpair(repo, revs)
2614 2614
2615 if reverse: 2615 if reverse:
2862 2862
2863 opts = pycompat.byteskwargs(opts) 2863 opts = pycompat.byteskwargs(opts)
2864 rev = opts.get(b'rev') 2864 rev = opts.get(b'rev')
2865 if rev: 2865 if rev:
2866 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn') 2866 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
2867 ctx = scmutil.revsingle(repo, rev, None) 2867 ctx = logcmdutil.revsingle(repo, rev, None)
2868 2868
2869 end = b'\n' 2869 end = b'\n'
2870 if opts.get(b'print0'): 2870 if opts.get(b'print0'):
2871 end = b'\0' 2871 end = b'\0'
2872 fmt = b'%s' + end 2872 fmt = b'%s' + end
3173 revs = logcmdutil.revrange(repo, revs) 3173 revs = logcmdutil.revrange(repo, revs)
3174 3174
3175 skipped = set() 3175 skipped = set()
3176 basectx = None 3176 basectx = None
3177 if opts.get('base'): 3177 if opts.get('base'):
3178 basectx = scmutil.revsingle(repo, opts['base'], None) 3178 basectx = logcmdutil.revsingle(repo, opts['base'], None)
3179 if basectx is None: 3179 if basectx is None:
3180 # check for merges 3180 # check for merges
3181 for rev in repo.revs(b'%ld and merge()', revs): 3181 for rev in repo.revs(b'%ld and merge()', revs):
3182 ui.warn(_(b'skipping ungraftable merge revision %d\n') % rev) 3182 ui.warn(_(b'skipping ungraftable merge revision %d\n') % rev)
3183 skipped.add(rev) 3183 skipped.add(rev)
3694 opts = pycompat.byteskwargs(opts) 3694 opts = pycompat.byteskwargs(opts)
3695 start = None 3695 start = None
3696 rev = opts.get(b'rev') 3696 rev = opts.get(b'rev')
3697 if rev: 3697 if rev:
3698 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn') 3698 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
3699 start = scmutil.revsingle(repo, rev, None).node() 3699 start = logcmdutil.revsingle(repo, rev, None).node()
3700 3700
3701 if opts.get(b'topo'): 3701 if opts.get(b'topo'):
3702 heads = [repo[h] for h in repo.heads(start)] 3702 heads = [repo[h] for h in repo.heads(start)]
3703 else: 3703 else:
3704 heads = [] 3704 heads = []
3930 if bookmarks or b'bookmarks' in fm.datahint(): 3930 if bookmarks or b'bookmarks' in fm.datahint():
3931 fm.data(bookmarks=fm.formatlist(getbms(), name=b'bookmark')) 3931 fm.data(bookmarks=fm.formatlist(getbms(), name=b'bookmark'))
3932 else: 3932 else:
3933 if rev: 3933 if rev:
3934 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn') 3934 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
3935 ctx = scmutil.revsingle(repo, rev, None) 3935 ctx = logcmdutil.revsingle(repo, rev, None)
3936 3936
3937 if ctx.rev() is None: 3937 if ctx.rev() is None:
3938 ctx = repo[None] 3938 ctx = repo[None]
3939 parents = ctx.parents() 3939 parents = ctx.parents()
3940 taglist = [] 3940 taglist = []
4443 opts = pycompat.byteskwargs(opts) 4443 opts = pycompat.byteskwargs(opts)
4444 if opts.get(b'print0'): 4444 if opts.get(b'print0'):
4445 end = b'\0' 4445 end = b'\0'
4446 else: 4446 else:
4447 end = b'\n' 4447 end = b'\n'
4448 ctx = scmutil.revsingle(repo, opts.get(b'rev'), None) 4448 ctx = logcmdutil.revsingle(repo, opts.get(b'rev'), None)
4449 4449
4450 ret = 1 4450 ret = 1
4451 m = scmutil.match( 4451 m = scmutil.match(
4452 ctx, pats, opts, default=b'relglob', badfn=lambda x, y: False 4452 ctx, pats, opts, default=b'relglob', badfn=lambda x, y: False
4453 ) 4453 )
4788 4788
4789 char = {b'l': b'@', b'x': b'*', b'': b'', b't': b'd'} 4789 char = {b'l': b'@', b'x': b'*', b'': b'', b't': b'd'}
4790 mode = {b'l': b'644', b'x': b'755', b'': b'644', b't': b'755'} 4790 mode = {b'l': b'644', b'x': b'755', b'': b'644', b't': b'755'}
4791 if node: 4791 if node:
4792 repo = scmutil.unhidehashlikerevs(repo, [node], b'nowarn') 4792 repo = scmutil.unhidehashlikerevs(repo, [node], b'nowarn')
4793 ctx = scmutil.revsingle(repo, node) 4793 ctx = logcmdutil.revsingle(repo, node)
4794 mf = ctx.manifest() 4794 mf = ctx.manifest()
4795 ui.pager(b'manifest') 4795 ui.pager(b'manifest')
4796 for f in ctx: 4796 for f in ctx:
4797 fm.startitem() 4797 fm.startitem()
4798 fm.context(ctx=ctx) 4798 fm.context(ctx=ctx)
4875 raise error.InputError(_(b"please specify just one revision")) 4875 raise error.InputError(_(b"please specify just one revision"))
4876 if not node: 4876 if not node:
4877 node = opts.get(b'rev') 4877 node = opts.get(b'rev')
4878 4878
4879 if node: 4879 if node:
4880 ctx = scmutil.revsingle(repo, node) 4880 ctx = logcmdutil.revsingle(repo, node)
4881 else: 4881 else:
4882 if ui.configbool(b'commands', b'merge.require-rev'): 4882 if ui.configbool(b'commands', b'merge.require-rev'):
4883 raise error.InputError( 4883 raise error.InputError(
4884 _( 4884 _(
4885 b'configuration requires specifying revision to merge ' 4885 b'configuration requires specifying revision to merge '
5054 5054
5055 opts = pycompat.byteskwargs(opts) 5055 opts = pycompat.byteskwargs(opts)
5056 rev = opts.get(b'rev') 5056 rev = opts.get(b'rev')
5057 if rev: 5057 if rev:
5058 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn') 5058 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
5059 ctx = scmutil.revsingle(repo, rev, None) 5059 ctx = logcmdutil.revsingle(repo, rev, None)
5060 5060
5061 if file_: 5061 if file_:
5062 m = scmutil.match(ctx, (file_,), opts) 5062 m = scmutil.match(ctx, (file_,), opts)
5063 if m.anypats() or len(m.files()) != 1: 5063 if m.anypats() or len(m.files()) != 1:
5064 raise error.InputError(_(b'can only specify an explicit filename')) 5064 raise error.InputError(_(b'can only specify an explicit filename'))
6345 ) 6345 )
6346 6346
6347 rev = opts.get(b'rev') 6347 rev = opts.get(b'rev')
6348 if rev: 6348 if rev:
6349 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn') 6349 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
6350 ctx = scmutil.revsingle(repo, rev) 6350 ctx = logcmdutil.revsingle(repo, rev)
6351 6351
6352 if not ( 6352 if not (
6353 pats 6353 pats
6354 or opts.get(b'include') 6354 or opts.get(b'include')
6355 or opts.get(b'exclude') 6355 or opts.get(b'exclude')
6903 if revs and terse: 6903 if revs and terse:
6904 msg = _(b'cannot use --terse with --rev') 6904 msg = _(b'cannot use --terse with --rev')
6905 raise error.InputError(msg) 6905 raise error.InputError(msg)
6906 elif change: 6906 elif change:
6907 repo = scmutil.unhidehashlikerevs(repo, [change], b'nowarn') 6907 repo = scmutil.unhidehashlikerevs(repo, [change], b'nowarn')
6908 ctx2 = scmutil.revsingle(repo, change, None) 6908 ctx2 = logcmdutil.revsingle(repo, change, None)
6909 ctx1 = ctx2.p1() 6909 ctx1 = ctx2.p1()
6910 else: 6910 else:
6911 repo = scmutil.unhidehashlikerevs(repo, revs, b'nowarn') 6911 repo = scmutil.unhidehashlikerevs(repo, revs, b'nowarn')
6912 ctx1, ctx2 = logcmdutil.revpair(repo, revs) 6912 ctx1, ctx2 = logcmdutil.revpair(repo, revs)
6913 6913
7451 _( 7451 _(
7452 b'working directory is not at a branch head ' 7452 b'working directory is not at a branch head '
7453 b'(use -f to force)' 7453 b'(use -f to force)'
7454 ) 7454 )
7455 ) 7455 )
7456 node = scmutil.revsingle(repo, rev_).node() 7456 node = logcmdutil.revsingle(repo, rev_).node()
7457 7457
7458 if not message: 7458 if not message:
7459 # we don't translate commit messages 7459 # we don't translate commit messages
7460 message = b'Added tag %s for changeset %s' % ( 7460 message = b'Added tag %s for changeset %s' % (
7461 b', '.join(names), 7461 b', '.join(names),
7475 ) 7475 )
7476 7476
7477 # don't allow tagging the null rev 7477 # don't allow tagging the null rev
7478 if ( 7478 if (
7479 not opts.get(b'remove') 7479 not opts.get(b'remove')
7480 and scmutil.revsingle(repo, rev_).rev() == nullrev 7480 and logcmdutil.revsingle(repo, rev_).rev() == nullrev
7481 ): 7481 ):
7482 raise error.InputError(_(b"cannot tag null revision")) 7482 raise error.InputError(_(b"cannot tag null revision"))
7483 7483
7484 tagsmod.tag( 7484 tagsmod.tag(
7485 repo, 7485 repo,
7838 7838
7839 # if we defined a bookmark, we have to remember the original name 7839 # if we defined a bookmark, we have to remember the original name
7840 brev = rev 7840 brev = rev
7841 if rev: 7841 if rev:
7842 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn') 7842 repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
7843 ctx = scmutil.revsingle(repo, rev, default=None) 7843 ctx = logcmdutil.revsingle(repo, rev, default=None)
7844 rev = ctx.rev() 7844 rev = ctx.rev()
7845 hidden = ctx.hidden() 7845 hidden = ctx.hidden()
7846 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')} 7846 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')}
7847 with ui.configoverride(overrides, b'update'): 7847 with ui.configoverride(overrides, b'update'):
7848 ret = hg.updatetotally( 7848 ret = hg.updatetotally(