annotate mercurial/cmd_impls/graft.py @ 53040:cdd7bf612c7b stable tip

bundle-spec: properly format boolean parameter (issue6960) This was breaking automatic clone bundle generation. This changeset fixes it and add a test to catch it in the future.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 11 Mar 2025 02:29:42 +0100
parents 68dc6cecca32
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
1 # graft.py - implementation of the graft command
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
2
52382
d4e30c15626d typing: add missing `from __future__ import annotations` to core modules
Matt Harbison <matt_harbison@yahoo.com>
parents: 52380
diff changeset
3 from __future__ import annotations
d4e30c15626d typing: add missing `from __future__ import annotations` to core modules
Matt Harbison <matt_harbison@yahoo.com>
parents: 52380
diff changeset
4
52383
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
5 import typing
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
6
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
7 from typing import (
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
8 Any,
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
9 Tuple,
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
10 )
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
11
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
12 from ..i18n import _
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
13
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
14 from .. import (
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
15 cmdutil,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
16 context,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
17 error,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
18 logcmdutil,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
19 merge as mergemod,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
20 state as statemod,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
21 )
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
22
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
23
52383
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
24 if typing.TYPE_CHECKING:
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
25 _ActionT = str
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
26 _CmdArgsT = Any # TODO: (statedata, revs, editor, cont, dry_run, tool)
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
27
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
28
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
29 def cmd_graft(ui, repo, *revs, **opts) -> int:
52379
0facc743b92f graft: fix a few typos in doc comments
Matt Harbison <matt_harbison@yahoo.com>
parents: 52378
diff changeset
30 """implement the graft command as defined in mercurial/commands.py"""
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
31 ret = _process_args(ui, repo, *revs, **opts)
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
32 action, graftstate, args = ret
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
33 if action == "ERROR":
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
34 return -1
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
35 elif action == "ABORT":
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
36 assert args is None
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
37 return cmdutil.abortgraft(ui, repo, graftstate)
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
38 elif action == "STOP":
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
39 assert args is None
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
40 return _stopgraft(ui, repo, graftstate)
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
41 elif action == "GRAFT":
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
42 return _graft_revisions(ui, repo, graftstate, *args)
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
43 elif action == "GRAFT-TO":
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
44 return _graft_revisions_in_memory(ui, repo, graftstate, *args)
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
45 else:
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
46 msg = b'unknown action: %s' % action.encode('ascii')
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
47 raise error.ProgrammingError(msg)
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
48
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
49
52383
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
50 def _process_args(
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
51 ui, repo, *revs, **opts
9042ffea4edd typing: add minimal annotations to cmd_impls/graft.py to pytype with 3.10
Matt Harbison <matt_harbison@yahoo.com>
parents: 52382
diff changeset
52 ) -> Tuple[_ActionT, statemod.cmdstate | None, _CmdArgsT | None]:
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
53 """process the graft command argument to figure out what to do
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
54
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
55 This also filter the selected revision to skip the one that cannot be graft
52379
0facc743b92f graft: fix a few typos in doc comments
Matt Harbison <matt_harbison@yahoo.com>
parents: 52378
diff changeset
56 or were already grafted.
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
57 """
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
58 if revs and opts.get('rev'):
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
59 ui.warn(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
60 _(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
61 b'warning: inconsistent use of --rev might give unexpected '
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
62 b'revision ordering!\n'
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
63 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
64 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
65
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
66 revs = list(revs)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
67 revs.extend(opts.get('rev'))
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
68 # a dict of data to be stored in state file
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
69 statedata = {}
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
70 # list of new nodes created by ongoing graft
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
71 statedata[b'newnodes'] = []
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
72
52368
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
73 # argument incompatible with followup from an interrupted operation
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
74 commit_args = [
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
75 'edit',
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
76 'log',
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
77 'user',
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
78 'date',
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
79 'currentdate',
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
80 'currentuser',
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
81 'to',
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
82 ]
52369
58827d815646 graft: also forbid "--base" with "--stop" and the like
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52368
diff changeset
83 nofollow_args = commit_args + ['base', 'rev']
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
84
52368
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
85 arg_compatibilities = [
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
86 ('no_commit', commit_args),
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
87 ('continue', ['to']),
52368
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
88 ('stop', nofollow_args),
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
89 ('abort', nofollow_args),
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
90 ]
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
91 cmdutil.check_at_most_one_arg(opts, 'abort', 'stop', 'continue')
52368
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
92 for arg, incompatible in arg_compatibilities:
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
93 cmdutil.check_incompatible_arguments(opts, arg, incompatible)
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
94
8faabe8abf66 graft: gather arg compatibility code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52367
diff changeset
95 cmdutil.resolve_commit_options(ui, opts)
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
96
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
97 cont = False
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
98
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
99 graftstate = statemod.cmdstate(repo, b'graftstate')
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
100
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
101 if opts.get('to'):
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
102 toctx = logcmdutil.revsingle(repo, opts['to'], None)
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
103 statedata[b'to'] = toctx.hex()
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
104 else:
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
105 toctx = repo[None].p1()
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
106
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
107 if opts.get('stop'):
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
108 return "STOP", graftstate, None
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
109 elif opts.get('abort'):
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
110 return "ABORT", graftstate, None
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
111 elif opts.get('continue'):
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
112 cont = True
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
113 if revs:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
114 raise error.InputError(_(b"can't specify --continue and revisions"))
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
115 # read in unfinished revisions
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
116 if graftstate.exists():
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
117 statedata = cmdutil.readgraftstate(repo, graftstate)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
118 if statedata.get(b'no_commit'):
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
119 opts['no_commit'] = statedata.get(b'no_commit')
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
120 if statedata.get(b'base'):
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
121 opts['base'] = statedata.get(b'base')
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
122 nodes = statedata[b'nodes']
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
123 revs = [repo[node].rev() for node in nodes]
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
124 else:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
125 cmdutil.wrongtooltocontinue(repo, _(b'graft'))
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
126 elif not revs:
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
127 raise error.InputError(_(b'no revisions specified'))
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
128 else:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
129 cmdutil.checkunfinished(repo)
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
130 if not opts.get('to'):
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
131 cmdutil.bailifchanged(repo)
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
132 revs = logcmdutil.revrange(repo, revs)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
133
52362
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
134 for o in (
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
135 b'date',
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
136 b'user',
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
137 b'log',
52363
11fb7f737456 graft: move no_commit into "statedata" too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52362
diff changeset
138 b'no_commit',
52364
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
139 b'dry_run',
52362
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
140 ):
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
141 v = opts.get(o.decode('ascii'))
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
142 # if statedata is already set, it comes from --continue and test says
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
143 # we should honor them above the options (which seems weird).
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
144 if v and o not in statedata:
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
145 statedata[o] = v
8572e80f978c graft: assign computed configuration value to statedata instead of opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52361
diff changeset
146
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
147 skipped = set()
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
148 basectx = None
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
149 if opts.get('base'):
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
150 basectx = logcmdutil.revsingle(repo, opts['base'], None)
52364
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
151 statedata[b'base'] = basectx.hex()
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
152 if basectx is None:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
153 # check for merges
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
154 for rev in repo.revs(b'%ld and merge()', revs):
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
155 ui.warn(_(b'skipping ungraftable merge revision %d\n') % rev)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
156 skipped.add(rev)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
157 revs = [r for r in revs if r not in skipped]
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
158 if not revs:
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
159 return "ERROR", None, None
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
160 if basectx is not None and len(revs) != 1:
52380
99615755fb8e graft: trim an InputError message
Matt Harbison <matt_harbison@yahoo.com>
parents: 52379
diff changeset
161 raise error.InputError(_(b'only one revision allowed with --base'))
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
162
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
163 # Don't check in the --continue case, in effect retaining --force across
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
164 # --continues. That's because without --force, any revisions we decided to
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
165 # skip would have been filtered out here, so they wouldn't have made their
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
166 # way to the graftstate. With --force, any revisions we would have otherwise
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
167 # skipped would not have been filtered out, and if they hadn't been applied
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
168 # already, they'd have been in the graftstate.
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
169 if not (cont or opts.get('force')) and basectx is None:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
170 # check for ancestors of dest branch
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
171 ancestors = repo.revs(b'%ld & (::%d)', revs, toctx.rev())
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
172 for rev in ancestors:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
173 ui.warn(_(b'skipping ancestor revision %d:%s\n') % (rev, repo[rev]))
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
174
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
175 revs = [r for r in revs if r not in ancestors]
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
176
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
177 if not revs:
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
178 return "ERROR", None, None
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
179
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
180 # analyze revs for earlier grafts
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
181 ids = {}
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
182 for ctx in repo.set(b"%ld", revs):
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
183 ids[ctx.hex()] = ctx.rev()
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
184 n = ctx.extra().get(b'source')
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
185 if n:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
186 ids[n] = ctx.rev()
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
187
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
188 # check ancestors for earlier grafts
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
189 ui.debug(b'scanning for duplicate grafts\n')
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
190
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
191 # The only changesets we can be sure doesn't contain grafts of any
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
192 # revs, are the ones that are common ancestors of *all* revs:
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
193 for rev in repo.revs(b'only(%d,ancestor(%ld))', toctx.rev(), revs):
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
194 ctx = repo[rev]
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
195 n = ctx.extra().get(b'source')
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
196 if n in ids:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
197 try:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
198 r = repo[n].rev()
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
199 except error.RepoLookupError:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
200 r = None
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
201 if r in revs:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
202 ui.warn(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
203 _(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
204 b'skipping revision %d:%s '
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
205 b'(already grafted to %d:%s)\n'
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
206 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
207 % (r, repo[r], rev, ctx)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
208 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
209 revs.remove(r)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
210 elif ids[n] in revs:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
211 if r is None:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
212 ui.warn(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
213 _(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
214 b'skipping already grafted revision %d:%s '
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
215 b'(%d:%s also has unknown origin %s)\n'
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
216 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
217 % (ids[n], repo[ids[n]], rev, ctx, n[:12])
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
218 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
219 else:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
220 ui.warn(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
221 _(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
222 b'skipping already grafted revision %d:%s '
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
223 b'(%d:%s also has origin %d:%s)\n'
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
224 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
225 % (ids[n], repo[ids[n]], rev, ctx, r, n[:12])
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
226 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
227 revs.remove(ids[n])
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
228 elif ctx.hex() in ids:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
229 r = ids[ctx.hex()]
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
230 if r in revs:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
231 ui.warn(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
232 _(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
233 b'skipping already grafted revision %d:%s '
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
234 b'(was grafted from %d:%s)\n'
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
235 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
236 % (r, repo[r], rev, ctx)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
237 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
238 revs.remove(r)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
239 if not revs:
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
240 return "ERROR", None, None
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
241
52367
0b52283d50bb graft: get the editor later
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52366
diff changeset
242 editor = cmdutil.getcommiteditor(editform=b'graft', **opts)
52364
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
243 dry_run = bool(opts.get("dry_run"))
52365
da216ed31c3d graft: explicitly pass the "tool" argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52364
diff changeset
244 tool = opts.get('tool', b'')
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
245 if opts.get("to"):
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
246 return "GRAFT-TO", graftstate, (statedata, revs, editor, dry_run, tool)
52366
77cb5d8643b3 graft: clarify the args passing depending of variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52365
diff changeset
247 return "GRAFT", graftstate, (statedata, revs, editor, cont, dry_run, tool)
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
248
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
249
52530
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
250 def _build_progress(ui, repo, ctx):
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
251 rev_sum = b'%d:%s "%s"' % (
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
252 ctx.rev(),
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
253 ctx,
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
254 ctx.description().split(b'\n', 1)[0],
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
255 )
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
256 names = repo.nodetags(ctx.node()) + repo.nodebookmarks(ctx.node())
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
257 if names:
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
258 rev_sum += b' (%s)' % b' '.join(names)
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
259 return _(b'grafting %s\n') % rev_sum
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
260
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
261
52531
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
262 def _build_meta(ui, repo, ctx, statedata):
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
263 source = ctx.extra().get(b'source')
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
264 extra = {}
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
265 if source:
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
266 extra[b'source'] = source
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
267 extra[b'intermediate-source'] = ctx.hex()
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
268 else:
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
269 extra[b'source'] = ctx.hex()
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
270 user = statedata.get(b'user', ctx.user())
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
271 date = statedata.get(b'date', ctx.date())
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
272 message = ctx.description()
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
273 if statedata.get(b'log'):
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
274 message += b'\n(grafted from %s)' % ctx.hex()
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
275 return (user, date, message, extra)
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
276
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
277
52532
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
278 def _graft_revisions_in_memory(
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
279 ui,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
280 repo,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
281 graftstate,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
282 statedata,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
283 revs,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
284 editor,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
285 dry_run,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
286 tool=b'',
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
287 ):
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
288 """graft revisions in memory
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
289
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
290 Abort on unresolved conflicts.
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
291 """
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
292 with repo.lock(), repo.transaction(b"graft"):
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
293 target = repo[statedata[b"to"]]
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
294 for r in revs:
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
295 ctx = repo[r]
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
296 ui.status(_build_progress(ui, repo, ctx))
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
297 if dry_run:
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
298 # we might want to actually perform the grafting to detect
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
299 # potential conflict in the dry run.
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
300 continue
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
301 wctx = context.overlayworkingctx(repo)
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
302 wctx.setbase(target)
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
303 if b'base' in statedata:
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
304 base = repo[statedata[b'base']]
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
305 else:
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
306 base = ctx.p1()
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
307
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
308 (user, date, message, extra) = _build_meta(ui, repo, ctx, statedata)
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
309
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
310 # perform the graft merge with p1(rev) as 'ancestor'
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
311 try:
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
312 overrides = {(b'ui', b'forcemerge'): tool}
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
313 with ui.configoverride(overrides, b'graft'):
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
314 mergemod.graft(
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
315 repo,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
316 ctx,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
317 base,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
318 wctx=wctx,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
319 )
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
320 except error.InMemoryMergeConflictsError as e:
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
321 raise error.Abort(
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
322 b'cannot graft in memory: merge conflicts',
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
323 hint=_(bytes(e)),
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
324 )
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
325 mctx = wctx.tomemctx(
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
326 message,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
327 user=user,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
328 date=date,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
329 extra=extra,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
330 editor=editor,
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
331 )
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
332 node = repo.commitctx(mctx)
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
333 target = repo[node]
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
334 return 0
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
335
68dc6cecca32 graft: add a `--to` flag grafting in memory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52531
diff changeset
336
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
337 def _graft_revisions(
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
338 ui,
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
339 repo,
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
340 graftstate,
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
341 statedata,
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
342 revs,
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
343 editor,
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
344 cont=False,
52364
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
345 dry_run=False,
52365
da216ed31c3d graft: explicitly pass the "tool" argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52364
diff changeset
346 tool=b'',
52361
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
347 ):
5ab77b93567c graft: split the argument processing from the grafting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52360
diff changeset
348 """actually graft some revisions"""
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
349 for pos, ctx in enumerate(repo.set(b"%ld", revs)):
52530
cef86c1d5dfd graft: extract creation of progress report line in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52383
diff changeset
350 ui.status(_build_progress(ui, repo, ctx))
52364
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
351 if dry_run:
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
352 continue
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
353
52531
de16800904f9 graft: extract meta information computation in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52530
diff changeset
354 (user, date, message, extra) = _build_meta(ui, repo, ctx, statedata)
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
355
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
356 # we don't merge the first commit when continuing
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
357 if not cont:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
358 # perform the graft merge with p1(rev) as 'ancestor'
52365
da216ed31c3d graft: explicitly pass the "tool" argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52364
diff changeset
359 overrides = {(b'ui', b'forcemerge'): tool}
52364
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
360 if b'base' in statedata:
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
361 base = repo[statedata[b'base']]
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
362 else:
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
363 base = ctx.p1()
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
364 with ui.configoverride(overrides, b'graft'):
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
365 stats = mergemod.graft(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
366 repo, ctx, base, [b'local', b'graft', b'parent of graft']
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
367 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
368 # report any conflicts
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
369 if stats.unresolvedcount > 0:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
370 # write out state for --continue
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
371 nodes = [repo[rev].hex() for rev in revs[pos:]]
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
372 statedata[b'nodes'] = nodes
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
373 stateversion = 1
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
374 graftstate.save(stateversion, statedata)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
375 ui.error(_(b"abort: unresolved conflicts, can't continue\n"))
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
376 ui.error(_(b"(use 'hg resolve' and 'hg graft --continue')\n"))
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
377 return 1
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
378 else:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
379 cont = False
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
380
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
381 # commit if --no-commit is false
52363
11fb7f737456 graft: move no_commit into "statedata" too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52362
diff changeset
382 if not statedata.get(b'no_commit'):
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
383 node = repo.commit(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
384 text=message, user=user, date=date, extra=extra, editor=editor
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
385 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
386 if node is None:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
387 ui.warn(
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
388 _(b'note: graft of %d:%s created no changes to commit\n')
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
389 % (ctx.rev(), ctx)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
390 )
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
391 # checking that newnodes exist because old state files won't have it
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
392 elif statedata.get(b'newnodes') is not None:
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
393 nn = statedata[b'newnodes']
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
394 assert isinstance(nn, list) # list of bytes
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
395 nn.append(node)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
396
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
397 # remove state when we complete successfully
52364
8d7029218a61 graft: move "dry_run" and "base" in statedate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52363
diff changeset
398 if not dry_run:
52360
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
399 graftstate.delete()
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
400
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
401 return 0
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
402
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
403
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
404 def _stopgraft(ui, repo, graftstate):
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
405 """stop the interrupted graft"""
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
406 if not graftstate.exists():
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
407 raise error.StateError(_(b"no interrupted graft found"))
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
408 pctx = repo[b'.']
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
409 mergemod.clean_update(pctx)
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
410 graftstate.delete()
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
411 ui.status(_(b"stopped the interrupted graft\n"))
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
412 ui.status(_(b"working directory is now at %s\n") % pctx.hex()[:12])
f2fc0a91faca commands: create a "mercurial.cmd_impls" module to host graft
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
413 return 0