comparison hgext/histedit.py @ 24772:8f6494eb16eb

histedit: move finishfold into fold class Let's move the finishfold function into the fold class so we can modify it from the roll class more easily.
author Durham Goode <durham@fb.com>
date Sat, 04 Apr 2015 02:12:24 -0700
parents 3133e246c912
children 090da03361c5
comparison
equal deleted inserted replaced
24771:3133e246c912 24772:8f6494eb16eb
544 544
545 foldopts = {} 545 foldopts = {}
546 if isinstance(self, rollup): 546 if isinstance(self, rollup):
547 foldopts['rollup'] = True 547 foldopts['rollup'] = True
548 548
549 return finishfold(repo.ui, repo, parentctx, rulectx, ctx.node(), 549 return self.finishfold(repo.ui, repo, parentctx, rulectx, ctx.node(),
550 foldopts, middlecommits) 550 foldopts, middlecommits)
551
552 def finishfold(self, ui, repo, ctx, oldctx, newnode, opts, internalchanges):
553 parent = ctx.parents()[0].node()
554 hg.update(repo, parent)
555 ### prepare new commit data
556 commitopts = opts.copy()
557 commitopts['user'] = ctx.user()
558 # commit message
559 if opts.get('rollup'):
560 newmessage = ctx.description()
561 else:
562 newmessage = '\n***\n'.join(
563 [ctx.description()] +
564 [repo[r].description() for r in internalchanges] +
565 [oldctx.description()]) + '\n'
566 commitopts['message'] = newmessage
567 # date
568 commitopts['date'] = max(ctx.date(), oldctx.date())
569 extra = ctx.extra().copy()
570 # histedit_source
571 # note: ctx is likely a temporary commit but that the best we can do
572 # here. This is sufficient to solve issue3681 anyway.
573 extra['histedit_source'] = '%s,%s' % (ctx.hex(), oldctx.hex())
574 commitopts['extra'] = extra
575 phasebackup = repo.ui.backupconfig('phases', 'new-commit')
576 try:
577 phasemin = max(ctx.phase(), oldctx.phase())
578 repo.ui.setconfig('phases', 'new-commit', phasemin, 'histedit')
579 n = collapse(repo, ctx, repo[newnode], commitopts)
580 finally:
581 repo.ui.restoreconfig(phasebackup)
582 if n is None:
583 return ctx, []
584 hg.update(repo, n)
585 replacements = [(oldctx.node(), (newnode,)),
586 (ctx.node(), (n,)),
587 (newnode, (n,)),
588 ]
589 for ich in internalchanges:
590 replacements.append((ich, (n,)))
591 return repo[n], replacements
551 592
552 class rollup(fold): 593 class rollup(fold):
553 pass 594 pass
554
555 def finishfold(ui, repo, ctx, oldctx, newnode, opts, internalchanges):
556 parent = ctx.parents()[0].node()
557 hg.update(repo, parent)
558 ### prepare new commit data
559 commitopts = opts.copy()
560 commitopts['user'] = ctx.user()
561 # commit message
562 if opts.get('rollup'):
563 newmessage = ctx.description()
564 else:
565 newmessage = '\n***\n'.join(
566 [ctx.description()] +
567 [repo[r].description() for r in internalchanges] +
568 [oldctx.description()]) + '\n'
569 commitopts['message'] = newmessage
570 # date
571 commitopts['date'] = max(ctx.date(), oldctx.date())
572 extra = ctx.extra().copy()
573 # histedit_source
574 # note: ctx is likely a temporary commit but that the best we can do here
575 # This is sufficient to solve issue3681 anyway
576 extra['histedit_source'] = '%s,%s' % (ctx.hex(), oldctx.hex())
577 commitopts['extra'] = extra
578 phasebackup = repo.ui.backupconfig('phases', 'new-commit')
579 try:
580 phasemin = max(ctx.phase(), oldctx.phase())
581 repo.ui.setconfig('phases', 'new-commit', phasemin, 'histedit')
582 n = collapse(repo, ctx, repo[newnode], commitopts)
583 finally:
584 repo.ui.restoreconfig(phasebackup)
585 if n is None:
586 return ctx, []
587 hg.update(repo, n)
588 replacements = [(oldctx.node(), (newnode,)),
589 (ctx.node(), (n,)),
590 (newnode, (n,)),
591 ]
592 for ich in internalchanges:
593 replacements.append((ich, (n,)))
594 return repo[n], replacements
595 595
596 class drop(histeditaction): 596 class drop(histeditaction):
597 def run(self): 597 def run(self):
598 parentctx = self.repo[self.state.parentctxnode] 598 parentctx = self.repo[self.state.parentctxnode]
599 return parentctx, [(self.node, tuple())] 599 return parentctx, [(self.node, tuple())]