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],