comparison mercurial/commands.py @ 22903:3d51e756b1ec

graft: use merge.graft
author Matt Mackall <mpm@selenic.com>
date Mon, 13 Oct 2014 17:12:31 -0500
parents 722117c8e023
children 2d0b60b5abc0
comparison
equal deleted inserted replaced
22902:ce0592328d68 22903:3d51e756b1ec
3452 if not revs: 3452 if not revs:
3453 return -1 3453 return -1
3454 3454
3455 wlock = repo.wlock() 3455 wlock = repo.wlock()
3456 try: 3456 try:
3457 current = repo['.']
3458 for pos, ctx in enumerate(repo.set("%ld", revs)): 3457 for pos, ctx in enumerate(repo.set("%ld", revs)):
3459 3458
3460 ui.status(_('grafting revision %s\n') % ctx.rev()) 3459 ui.status(_('grafting revision %s\n') % ctx.rev())
3461 if opts.get('dry_run'): 3460 if opts.get('dry_run'):
3462 continue 3461 continue
3480 # perform the graft merge with p1(rev) as 'ancestor' 3479 # perform the graft merge with p1(rev) as 'ancestor'
3481 try: 3480 try:
3482 # ui.forcemerge is an internal variable, do not document 3481 # ui.forcemerge is an internal variable, do not document
3483 repo.ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), 3482 repo.ui.setconfig('ui', 'forcemerge', opts.get('tool', ''),
3484 'graft') 3483 'graft')
3485 stats = mergemod.update(repo, ctx.node(), True, True, False, 3484 stats = mergemod.graft(repo, ctx, ctx.p1(),
3486 ctx.p1().node(), 3485 ['local', 'graft'])
3487 labels=['local', 'graft'])
3488 # drop the second merge parent
3489 repo.dirstate.beginparentchange()
3490 repo.setparents(current.node(), nullid)
3491 repo.dirstate.write()
3492 # fix up dirstate for copies and renames
3493 copies.duplicatecopies(repo, ctx.rev(), ctx.p1().rev())
3494 repo.dirstate.endparentchange()
3495 finally: 3486 finally:
3496 repo.ui.setconfig('ui', 'forcemerge', '', 'graft') 3487 repo.ui.setconfig('ui', 'forcemerge', '', 'graft')
3497 # report any conflicts 3488 # report any conflicts
3498 if stats and stats[3] > 0: 3489 if stats and stats[3] > 0:
3499 # write out state for --continue 3490 # write out state for --continue
3508 # commit 3499 # commit
3509 node = repo.commit(text=message, user=user, 3500 node = repo.commit(text=message, user=user,
3510 date=date, extra=extra, editor=editor) 3501 date=date, extra=extra, editor=editor)
3511 if node is None: 3502 if node is None:
3512 ui.status(_('graft for revision %s is empty\n') % ctx.rev()) 3503 ui.status(_('graft for revision %s is empty\n') % ctx.rev())
3513 else:
3514 current = repo[node]
3515 finally: 3504 finally:
3516 wlock.release() 3505 wlock.release()
3517 3506
3518 # remove state when we complete successfully 3507 # remove state when we complete successfully
3519 if not opts.get('dry_run'): 3508 if not opts.get('dry_run'):