Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/cmd_impls/graft.py @ 52364:8d7029218a61
graft: move "dry_run" and "base" in statedate
Same logic as before.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 20 Nov 2024 02:37:37 +0100 |
parents | 11fb7f737456 |
children | da216ed31c3d |
comparison
equal
deleted
inserted
replaced
52363:11fb7f737456 | 52364:8d7029218a61 |
---|---|
114 for o in ( | 114 for o in ( |
115 b'date', | 115 b'date', |
116 b'user', | 116 b'user', |
117 b'log', | 117 b'log', |
118 b'no_commit', | 118 b'no_commit', |
119 b'dry_run', | |
119 ): | 120 ): |
120 v = opts.get(o.decode('ascii')) | 121 v = opts.get(o.decode('ascii')) |
121 # if statedata is already set, it comes from --continue and test says | 122 # if statedata is already set, it comes from --continue and test says |
122 # we should honor them above the options (which seems weird). | 123 # we should honor them above the options (which seems weird). |
123 if v and o not in statedata: | 124 if v and o not in statedata: |
125 | 126 |
126 skipped = set() | 127 skipped = set() |
127 basectx = None | 128 basectx = None |
128 if opts.get('base'): | 129 if opts.get('base'): |
129 basectx = logcmdutil.revsingle(repo, opts['base'], None) | 130 basectx = logcmdutil.revsingle(repo, opts['base'], None) |
131 statedata[b'base'] = basectx.hex() | |
130 if basectx is None: | 132 if basectx is None: |
131 # check for merges | 133 # check for merges |
132 for rev in repo.revs(b'%ld and merge()', revs): | 134 for rev in repo.revs(b'%ld and merge()', revs): |
133 ui.warn(_(b'skipping ungraftable merge revision %d\n') % rev) | 135 ui.warn(_(b'skipping ungraftable merge revision %d\n') % rev) |
134 skipped.add(rev) | 136 skipped.add(rev) |
215 ) | 217 ) |
216 revs.remove(r) | 218 revs.remove(r) |
217 if not revs: | 219 if not revs: |
218 return None | 220 return None |
219 | 221 |
220 if opts.get('base'): | 222 dry_run = bool(opts.get("dry_run")) |
221 statedata[b'base'] = opts['base'] | 223 return "GRAFT", [graftstate, statedata, revs, editor, cont, dry_run, opts] |
222 | |
223 return "GRAFT", [graftstate, statedata, revs, editor, basectx, cont, opts] | |
224 | 224 |
225 | 225 |
226 def _graft_revisions( | 226 def _graft_revisions( |
227 ui, | 227 ui, |
228 repo, | 228 repo, |
229 graftstate, | 229 graftstate, |
230 statedata, | 230 statedata, |
231 revs, | 231 revs, |
232 editor, | 232 editor, |
233 basectx, | |
234 cont=False, | 233 cont=False, |
234 dry_run=False, | |
235 opts, | 235 opts, |
236 ): | 236 ): |
237 """actually graft some revisions""" | 237 """actually graft some revisions""" |
238 for pos, ctx in enumerate(repo.set(b"%ld", revs)): | 238 for pos, ctx in enumerate(repo.set(b"%ld", revs)): |
239 desc = b'%d:%s "%s"' % ( | 239 desc = b'%d:%s "%s"' % ( |
243 ) | 243 ) |
244 names = repo.nodetags(ctx.node()) + repo.nodebookmarks(ctx.node()) | 244 names = repo.nodetags(ctx.node()) + repo.nodebookmarks(ctx.node()) |
245 if names: | 245 if names: |
246 desc += b' (%s)' % b' '.join(names) | 246 desc += b' (%s)' % b' '.join(names) |
247 ui.status(_(b'grafting %s\n') % desc) | 247 ui.status(_(b'grafting %s\n') % desc) |
248 if opts.get('dry_run'): | 248 if dry_run: |
249 continue | 249 continue |
250 | 250 |
251 source = ctx.extra().get(b'source') | 251 source = ctx.extra().get(b'source') |
252 extra = {} | 252 extra = {} |
253 if source: | 253 if source: |
263 | 263 |
264 # we don't merge the first commit when continuing | 264 # we don't merge the first commit when continuing |
265 if not cont: | 265 if not cont: |
266 # perform the graft merge with p1(rev) as 'ancestor' | 266 # perform the graft merge with p1(rev) as 'ancestor' |
267 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')} | 267 overrides = {(b'ui', b'forcemerge'): opts.get('tool', b'')} |
268 base = ctx.p1() if basectx is None else basectx | 268 if b'base' in statedata: |
269 base = repo[statedata[b'base']] | |
270 else: | |
271 base = ctx.p1() | |
269 with ui.configoverride(overrides, b'graft'): | 272 with ui.configoverride(overrides, b'graft'): |
270 stats = mergemod.graft( | 273 stats = mergemod.graft( |
271 repo, ctx, base, [b'local', b'graft', b'parent of graft'] | 274 repo, ctx, base, [b'local', b'graft', b'parent of graft'] |
272 ) | 275 ) |
273 # report any conflicts | 276 # report any conflicts |
298 nn = statedata[b'newnodes'] | 301 nn = statedata[b'newnodes'] |
299 assert isinstance(nn, list) # list of bytes | 302 assert isinstance(nn, list) # list of bytes |
300 nn.append(node) | 303 nn.append(node) |
301 | 304 |
302 # remove state when we complete successfully | 305 # remove state when we complete successfully |
303 if not opts.get('dry_run'): | 306 if not dry_run: |
304 graftstate.delete() | 307 graftstate.delete() |
305 | 308 |
306 return 0 | 309 return 0 |
307 | 310 |
308 | 311 |