2445 ui.status(_('removing %s\n') % m.rel(f)) |
2445 ui.status(_('removing %s\n') % m.rel(f)) |
2446 |
2446 |
2447 repo[None].forget(forget) |
2447 repo[None].forget(forget) |
2448 return errs |
2448 return errs |
2449 |
2449 |
2450 @command('graft', |
2450 @command( |
2451 [('e', 'edit', False, _('invoke editor on commit messages'))], |
2451 'graft', |
|
2452 [('e', 'edit', False, _('invoke editor on commit messages')), |
|
2453 ('D', 'currentdate', False, |
|
2454 _('record the current date as commit date')), |
|
2455 ('U', 'currentuser', False, |
|
2456 _('record the current user as committer'), _('DATE'))] |
|
2457 + commitopts2 + mergetoolopts, |
2452 _('[OPTION]... REVISION...')) |
2458 _('[OPTION]... REVISION...')) |
2453 def graft(ui, repo, rev, *revs, **opts): |
2459 def graft(ui, repo, rev, *revs, **opts): |
2454 '''copy changes from other branches onto the current branch |
2460 '''copy changes from other branches onto the current branch |
2455 |
2461 |
2456 This command uses Mercurial's merge logic to copy individual |
2462 This command uses Mercurial's merge logic to copy individual |
2463 |
2469 |
2464 Returns 0 on successful completion. |
2470 Returns 0 on successful completion. |
2465 ''' |
2471 ''' |
2466 |
2472 |
2467 cmdutil.bailifchanged(repo) |
2473 cmdutil.bailifchanged(repo) |
|
2474 |
|
2475 if not opts.get('user') and opts.get('currentuser'): |
|
2476 opts['user'] = ui.username() |
|
2477 if not opts.get('date') and opts.get('currentdate'): |
|
2478 opts['date'] = "%d %d" % util.makedate() |
2468 |
2479 |
2469 editor = None |
2480 editor = None |
2470 if opts.get('edit'): |
2481 if opts.get('edit'): |
2471 editor = cmdutil.commitforceeditor |
2482 editor = cmdutil.commitforceeditor |
2472 |
2483 |
2500 |
2511 |
2501 for ctx in repo.set("%ld", revs): |
2512 for ctx in repo.set("%ld", revs): |
2502 current = repo['.'] |
2513 current = repo['.'] |
2503 ui.debug('grafting revision %s', ctx.rev()) |
2514 ui.debug('grafting revision %s', ctx.rev()) |
2504 # perform the graft merge with p1(rev) as 'ancestor' |
2515 # perform the graft merge with p1(rev) as 'ancestor' |
2505 stats = mergemod.update(repo, ctx.node(), True, True, False, |
2516 try: |
2506 ctx.p1().node()) |
2517 # ui.forcemerge is an internal variable, do not document |
|
2518 repo.ui.setconfig('ui', 'forcemerge', opts.get('tool', '')) |
|
2519 stats = mergemod.update(repo, ctx.node(), True, True, False, |
|
2520 ctx.p1().node()) |
|
2521 finally: |
|
2522 ui.setconfig('ui', 'forcemerge', '') |
2507 # drop the second merge parent |
2523 # drop the second merge parent |
2508 repo.dirstate.setparents(current.node(), nullid) |
2524 repo.dirstate.setparents(current.node(), nullid) |
2509 repo.dirstate.write() |
2525 repo.dirstate.write() |
2510 # fix up dirstate for copies and renames |
2526 # fix up dirstate for copies and renames |
2511 cmdutil.duplicatecopies(repo, ctx.rev(), current.node(), nullid) |
2527 cmdutil.duplicatecopies(repo, ctx.rev(), current.node(), nullid) |
2513 if stats and stats[3] > 0: |
2529 if stats and stats[3] > 0: |
2514 raise util.Abort(_("unresolved conflicts, can't continue"), |
2530 raise util.Abort(_("unresolved conflicts, can't continue"), |
2515 hint=_('use hg resolve and hg graft --continue')) |
2531 hint=_('use hg resolve and hg graft --continue')) |
2516 # commit |
2532 # commit |
2517 extra = {'source': ctx.hex()} |
2533 extra = {'source': ctx.hex()} |
2518 repo.commit(text=ctx.description(), user=ctx.user(), |
2534 user = ctx.user() |
2519 date=ctx.date(), extra=extra, editor=editor) |
2535 if opts.get('user'): |
|
2536 user = opts['user'] |
|
2537 date = ctx.date() |
|
2538 if opts.get('date'): |
|
2539 date = opts['date'] |
|
2540 repo.commit(text=ctx.description(), user=user, |
|
2541 date=date, extra=extra, editor=editor) |
2520 |
2542 |
2521 return 0 |
2543 return 0 |
2522 |
2544 |
2523 @command('grep', |
2545 @command('grep', |
2524 [('0', 'print0', None, _('end fields with NUL')), |
2546 [('0', 'print0', None, _('end fields with NUL')), |