4912 all changes. |
4912 all changes. |
4913 |
4913 |
4914 Returns 0 on success, 1 if there are unresolved files. |
4914 Returns 0 on success, 1 if there are unresolved files. |
4915 """ |
4915 """ |
4916 |
4916 |
4917 opts = pycompat.byteskwargs(opts) |
4917 abort = opts.get('abort') |
4918 abort = opts.get(b'abort') |
|
4919 if abort and repo.dirstate.p2() == repo.nullid: |
4918 if abort and repo.dirstate.p2() == repo.nullid: |
4920 cmdutil.wrongtooltocontinue(repo, _(b'merge')) |
4919 cmdutil.wrongtooltocontinue(repo, _(b'merge')) |
4921 cmdutil.check_incompatible_arguments(opts, b'abort', [b'rev', b'preview']) |
4920 cmdutil.check_incompatible_arguments(opts, 'abort', ['rev', 'preview']) |
4922 if abort: |
4921 if abort: |
4923 state = cmdutil.getunfinishedstate(repo) |
4922 state = cmdutil.getunfinishedstate(repo) |
4924 if state and state._opname != b'merge': |
4923 if state and state._opname != b'merge': |
4925 raise error.StateError( |
4924 raise error.StateError( |
4926 _(b'cannot abort merge with %s in progress') % (state._opname), |
4925 _(b'cannot abort merge with %s in progress') % (state._opname), |
4928 ) |
4927 ) |
4929 if node: |
4928 if node: |
4930 raise error.InputError(_(b"cannot specify a node with --abort")) |
4929 raise error.InputError(_(b"cannot specify a node with --abort")) |
4931 return hg.abortmerge(repo.ui, repo) |
4930 return hg.abortmerge(repo.ui, repo) |
4932 |
4931 |
4933 if opts.get(b'rev') and node: |
4932 if opts.get('rev') and node: |
4934 raise error.InputError(_(b"please specify just one revision")) |
4933 raise error.InputError(_(b"please specify just one revision")) |
4935 if not node: |
4934 if not node: |
4936 node = opts.get(b'rev') |
4935 node = opts.get('rev') |
4937 |
4936 |
4938 if node: |
4937 if node: |
4939 ctx = logcmdutil.revsingle(repo, node) |
4938 ctx = logcmdutil.revsingle(repo, node) |
4940 else: |
4939 else: |
4941 if ui.configbool(b'commands', b'merge.require-rev'): |
4940 if ui.configbool(b'commands', b'merge.require-rev'): |
4950 if ctx.node() is None: |
4949 if ctx.node() is None: |
4951 raise error.InputError( |
4950 raise error.InputError( |
4952 _(b'merging with the working copy has no effect') |
4951 _(b'merging with the working copy has no effect') |
4953 ) |
4952 ) |
4954 |
4953 |
4955 if opts.get(b'preview'): |
4954 if opts.get('preview'): |
4956 # find nodes that are ancestors of p2 but not of p1 |
4955 # find nodes that are ancestors of p2 but not of p1 |
4957 p1 = repo[b'.'].node() |
4956 p1 = repo[b'.'].node() |
4958 p2 = ctx.node() |
4957 p2 = ctx.node() |
4959 nodes = repo.changelog.findmissing(common=[p1], heads=[p2]) |
4958 nodes = repo.changelog.findmissing(common=[p1], heads=[p2]) |
4960 |
4959 |
4961 displayer = logcmdutil.changesetdisplayer(ui, repo, opts) |
4960 displayer = logcmdutil.changesetdisplayer( |
|
4961 ui, repo, pycompat.byteskwargs(opts) |
|
4962 ) |
4962 for node in nodes: |
4963 for node in nodes: |
4963 displayer.show(repo[node]) |
4964 displayer.show(repo[node]) |
4964 displayer.close() |
4965 displayer.close() |
4965 return 0 |
4966 return 0 |
4966 |
4967 |
4967 # ui.forcemerge is an internal variable, do not document |
4968 # ui.forcemerge is an internal variable, do not document |
4968 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')} |
4969 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')} |
4969 with ui.configoverride(overrides, b'merge'): |
4970 with ui.configoverride(overrides, b'merge'): |
4970 force = opts.get(b'force') |
4971 force = opts.get('force') |
4971 labels = [b'working copy', b'merge rev', b'common ancestor'] |
4972 labels = [b'working copy', b'merge rev', b'common ancestor'] |
4972 return hg.merge(ctx, force=force, labels=labels) |
4973 return hg.merge(ctx, force=force, labels=labels) |
4973 |
4974 |
4974 |
4975 |
4975 statemod.addunfinished( |
4976 statemod.addunfinished( |