Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.py @ 44906:e5043679bfcc stable
graft-state: save --base in graft's state, fixing bug with graft --continue
Without this change, running graft --continue after grafting a merge commit using --base
(and encountering conflicts) will output "skipping ungraftable merge revision" even though
we specified a base in the initial graft command.
Graft's improve behaviour is reflected in test-graft.t.
Differential Revision: https://phab.mercurial-scm.org/D8578
author | Charles Chamberlain <cchamberlain@janestreet.com> |
---|---|
date | Tue, 26 May 2020 11:14:07 -0400 |
parents | 16c361152133 |
children | 2dc5ae953c4a |
comparison
equal
deleted
inserted
replaced
44830:91e509a12dbc | 44906:e5043679bfcc |
---|---|
2967 ) | 2967 ) |
2968 ) | 2968 ) |
2969 | 2969 |
2970 revs = list(revs) | 2970 revs = list(revs) |
2971 revs.extend(opts.get(b'rev')) | 2971 revs.extend(opts.get(b'rev')) |
2972 basectx = None | |
2973 if opts.get(b'base'): | |
2974 basectx = scmutil.revsingle(repo, opts[b'base'], None) | |
2975 # a dict of data to be stored in state file | 2972 # a dict of data to be stored in state file |
2976 statedata = {} | 2973 statedata = {} |
2977 # list of new nodes created by ongoing graft | 2974 # list of new nodes created by ongoing graft |
2978 statedata[b'newnodes'] = [] | 2975 statedata[b'newnodes'] = [] |
2979 | 2976 |
3059 opts[b'user'] = statedata[b'user'] | 3056 opts[b'user'] = statedata[b'user'] |
3060 if statedata.get(b'log'): | 3057 if statedata.get(b'log'): |
3061 opts[b'log'] = True | 3058 opts[b'log'] = True |
3062 if statedata.get(b'no_commit'): | 3059 if statedata.get(b'no_commit'): |
3063 opts[b'no_commit'] = statedata.get(b'no_commit') | 3060 opts[b'no_commit'] = statedata.get(b'no_commit') |
3061 if statedata.get(b'base'): | |
3062 opts[b'base'] = statedata.get(b'base') | |
3064 nodes = statedata[b'nodes'] | 3063 nodes = statedata[b'nodes'] |
3065 revs = [repo[node].rev() for node in nodes] | 3064 revs = [repo[node].rev() for node in nodes] |
3066 else: | 3065 else: |
3067 cmdutil.wrongtooltocontinue(repo, _(b'graft')) | 3066 cmdutil.wrongtooltocontinue(repo, _(b'graft')) |
3068 else: | 3067 else: |
3071 cmdutil.checkunfinished(repo) | 3070 cmdutil.checkunfinished(repo) |
3072 cmdutil.bailifchanged(repo) | 3071 cmdutil.bailifchanged(repo) |
3073 revs = scmutil.revrange(repo, revs) | 3072 revs = scmutil.revrange(repo, revs) |
3074 | 3073 |
3075 skipped = set() | 3074 skipped = set() |
3075 basectx = None | |
3076 if opts.get(b'base'): | |
3077 basectx = scmutil.revsingle(repo, opts[b'base'], None) | |
3076 if basectx is None: | 3078 if basectx is None: |
3077 # check for merges | 3079 # check for merges |
3078 for rev in repo.revs(b'%ld and merge()', revs): | 3080 for rev in repo.revs(b'%ld and merge()', revs): |
3079 ui.warn(_(b'skipping ungraftable merge revision %d\n') % rev) | 3081 ui.warn(_(b'skipping ungraftable merge revision %d\n') % rev) |
3080 skipped.add(rev) | 3082 skipped.add(rev) |
3163 if not revs: | 3165 if not revs: |
3164 return -1 | 3166 return -1 |
3165 | 3167 |
3166 if opts.get(b'no_commit'): | 3168 if opts.get(b'no_commit'): |
3167 statedata[b'no_commit'] = True | 3169 statedata[b'no_commit'] = True |
3170 if opts.get(b'base'): | |
3171 statedata[b'base'] = True | |
3168 for pos, ctx in enumerate(repo.set(b"%ld", revs)): | 3172 for pos, ctx in enumerate(repo.set(b"%ld", revs)): |
3169 desc = b'%d:%s "%s"' % ( | 3173 desc = b'%d:%s "%s"' % ( |
3170 ctx.rev(), | 3174 ctx.rev(), |
3171 ctx, | 3175 ctx, |
3172 ctx.description().split(b'\n', 1)[0], | 3176 ctx.description().split(b'\n', 1)[0], |