Mercurial > hg
comparison mercurial/commands.py @ 50825:973fbb27ab45
backout: migrate `opts` to native kwargs
It will take a bit to unwind `cmdutil.commit`, so there's a conversion to
byteskwargs there, without changing the type of `opts` in this function. That's
also useful to flag it as needing to be changed.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 20 Aug 2023 00:27:27 -0400 |
parents | 489268c8ee7e |
children | 36901c182d70 |
comparison
equal
deleted
inserted
replaced
50824:489268c8ee7e | 50825:973fbb27ab45 |
---|---|
773 return _dobackout(ui, repo, node, rev, **opts) | 773 return _dobackout(ui, repo, node, rev, **opts) |
774 | 774 |
775 | 775 |
776 def _dobackout(ui, repo, node=None, rev=None, **opts): | 776 def _dobackout(ui, repo, node=None, rev=None, **opts): |
777 cmdutil.check_incompatible_arguments(opts, 'no_commit', ['commit', 'merge']) | 777 cmdutil.check_incompatible_arguments(opts, 'no_commit', ['commit', 'merge']) |
778 opts = pycompat.byteskwargs(opts) | |
779 | 778 |
780 if rev and node: | 779 if rev and node: |
781 raise error.InputError(_(b"please specify just one revision")) | 780 raise error.InputError(_(b"please specify just one revision")) |
782 | 781 |
783 if not rev: | 782 if not rev: |
784 rev = node | 783 rev = node |
785 | 784 |
786 if not rev: | 785 if not rev: |
787 raise error.InputError(_(b"please specify a revision to backout")) | 786 raise error.InputError(_(b"please specify a revision to backout")) |
788 | 787 |
789 date = opts.get(b'date') | 788 date = opts.get('date') |
790 if date: | 789 if date: |
791 opts[b'date'] = dateutil.parsedate(date) | 790 opts['date'] = dateutil.parsedate(date) |
792 | 791 |
793 cmdutil.checkunfinished(repo) | 792 cmdutil.checkunfinished(repo) |
794 cmdutil.bailifchanged(repo) | 793 cmdutil.bailifchanged(repo) |
795 ctx = logcmdutil.revsingle(repo, rev) | 794 ctx = logcmdutil.revsingle(repo, rev) |
796 node = ctx.node() | 795 node = ctx.node() |
803 | 802 |
804 p1, p2 = repo.changelog.parents(node) | 803 p1, p2 = repo.changelog.parents(node) |
805 if p1 == repo.nullid: | 804 if p1 == repo.nullid: |
806 raise error.InputError(_(b'cannot backout a change with no parents')) | 805 raise error.InputError(_(b'cannot backout a change with no parents')) |
807 if p2 != repo.nullid: | 806 if p2 != repo.nullid: |
808 if not opts.get(b'parent'): | 807 if not opts.get('parent'): |
809 raise error.InputError(_(b'cannot backout a merge changeset')) | 808 raise error.InputError(_(b'cannot backout a merge changeset')) |
810 p = repo.lookup(opts[b'parent']) | 809 p = repo.lookup(opts['parent']) |
811 if p not in (p1, p2): | 810 if p not in (p1, p2): |
812 raise error.InputError( | 811 raise error.InputError( |
813 _(b'%s is not a parent of %s') % (short(p), short(node)) | 812 _(b'%s is not a parent of %s') % (short(p), short(node)) |
814 ) | 813 ) |
815 parent = p | 814 parent = p |
816 else: | 815 else: |
817 if opts.get(b'parent'): | 816 if opts.get('parent'): |
818 raise error.InputError( | 817 raise error.InputError( |
819 _(b'cannot use --parent on non-merge changeset') | 818 _(b'cannot use --parent on non-merge changeset') |
820 ) | 819 ) |
821 parent = p1 | 820 parent = p1 |
822 | 821 |
823 # the backout should appear on the same branch | 822 # the backout should appear on the same branch |
824 branch = repo.dirstate.branch() | 823 branch = repo.dirstate.branch() |
825 bheads = repo.branchheads(branch) | 824 bheads = repo.branchheads(branch) |
826 rctx = scmutil.revsingle(repo, hex(parent)) | 825 rctx = scmutil.revsingle(repo, hex(parent)) |
827 if not opts.get(b'merge') and op1 != node: | 826 if not opts.get('merge') and op1 != node: |
828 with repo.transaction(b"backout"): | 827 with repo.transaction(b"backout"): |
829 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')} | 828 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')} |
830 with ui.configoverride(overrides, b'backout'): | 829 with ui.configoverride(overrides, b'backout'): |
831 stats = mergemod.back_out(ctx, parent=repo[parent]) | 830 stats = mergemod.back_out(ctx, parent=repo[parent]) |
832 repo.setparents(op1, op2) | 831 repo.setparents(op1, op2) |
833 hg._showstats(repo, stats) | 832 hg._showstats(repo, stats) |
834 if stats.unresolvedcount: | 833 if stats.unresolvedcount: |
839 else: | 838 else: |
840 hg.clean(repo, node, show_stats=False) | 839 hg.clean(repo, node, show_stats=False) |
841 repo.dirstate.setbranch(branch, repo.currenttransaction()) | 840 repo.dirstate.setbranch(branch, repo.currenttransaction()) |
842 cmdutil.revert(ui, repo, rctx) | 841 cmdutil.revert(ui, repo, rctx) |
843 | 842 |
844 if opts.get(b'no_commit'): | 843 if opts.get('no_commit'): |
845 msg = _(b"changeset %s backed out, don't forget to commit.\n") | 844 msg = _(b"changeset %s backed out, don't forget to commit.\n") |
846 ui.status(msg % short(node)) | 845 ui.status(msg % short(node)) |
847 return 0 | 846 return 0 |
848 | 847 |
849 def commitfunc(ui, repo, message, match, opts): | 848 def commitfunc(ui, repo, message, match, opts): |
860 ) | 859 ) |
861 | 860 |
862 # save to detect changes | 861 # save to detect changes |
863 tip = repo.changelog.tip() | 862 tip = repo.changelog.tip() |
864 | 863 |
865 newnode = cmdutil.commit(ui, repo, commitfunc, [], opts) | 864 newnode = cmdutil.commit( |
865 ui, repo, commitfunc, [], pycompat.byteskwargs(opts) | |
866 ) | |
866 if not newnode: | 867 if not newnode: |
867 ui.status(_(b"nothing changed\n")) | 868 ui.status(_(b"nothing changed\n")) |
868 return 1 | 869 return 1 |
869 cmdutil.commitstatus(repo, newnode, branch, bheads, tip) | 870 cmdutil.commitstatus(repo, newnode, branch, bheads, tip) |
870 | 871 |
873 | 874 |
874 ui.status( | 875 ui.status( |
875 _(b'changeset %s backs out changeset %s\n') | 876 _(b'changeset %s backs out changeset %s\n') |
876 % (nice(newnode), nice(node)) | 877 % (nice(newnode), nice(node)) |
877 ) | 878 ) |
878 if opts.get(b'merge') and op1 != node: | 879 if opts.get('merge') and op1 != node: |
879 hg.clean(repo, op1, show_stats=False) | 880 hg.clean(repo, op1, show_stats=False) |
880 ui.status(_(b'merging with changeset %s\n') % nice(newnode)) | 881 ui.status(_(b'merging with changeset %s\n') % nice(newnode)) |
881 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')} | 882 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')} |
882 with ui.configoverride(overrides, b'backout'): | 883 with ui.configoverride(overrides, b'backout'): |
883 return hg.merge(repo[b'tip']) | 884 return hg.merge(repo[b'tip']) |
884 return 0 | 885 return 0 |
885 | 886 |
886 | 887 |