D2809: rebase: extract function for rebasing a single node
This revision was automatically updated to reflect the committed changes. Closed by commit rHGd56e4d78a366: rebase: extract function for rebasing a single node (authored by martinvonz, committed by ). REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D2809?vs=6874=6988 REVISION DETAIL https://phab.mercurial-scm.org/D2809 AFFECTED FILES hgext/rebase.py CHANGE DETAILS diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -430,115 +430,122 @@ ui.note(_('rebase merging completed\n')) def _performrebasesubset(self, tr, subset, pos, total): -repo, ui, opts = self.repo, self.ui, self.opts -sortedrevs = repo.revs('sort(%ld, -topo)', subset) +sortedrevs = self.repo.revs('sort(%ld, -topo)', subset) allowdivergence = self.ui.configbool( 'experimental', 'evolution.allowdivergence') if not allowdivergence: -sortedrevs -= repo.revs( +sortedrevs -= self.repo.revs( 'descendants(%ld) and not %ld', self.obsoletewithoutsuccessorindestination, self.obsoletewithoutsuccessorindestination, ) +posholder = [pos] +def progress(ctx): +posholder[0] += 1 +self.repo.ui.progress(_("rebasing"), posholder[0], + ("%d:%s" % (ctx.rev(), ctx)), _('changesets'), + total) for rev in sortedrevs: -dest = self.destmap[rev] -ctx = repo[rev] -desc = _ctxdesc(ctx) -if self.state[rev] == rev: -ui.status(_('already rebased %s\n') % desc) -elif (not allowdivergence - and rev in self.obsoletewithoutsuccessorindestination): -msg = _('note: not rebasing %s and its descendants as ' -'this would cause divergence\n') % desc -repo.ui.status(msg) -self.skipped.add(rev) -elif rev in self.obsoletenotrebased: -succ = self.obsoletenotrebased[rev] -if succ is None: -msg = _('note: not rebasing %s, it has no ' -'successor\n') % desc -else: -succdesc = _ctxdesc(repo[succ]) -msg = (_('note: not rebasing %s, already in ' - 'destination as %s\n') % (desc, succdesc)) -repo.ui.status(msg) -# Make clearrebased aware state[rev] is not a true successor -self.skipped.add(rev) -# Record rev as moved to its desired destination in self.state. -# This helps bookmark and working parent movement. -dest = max(adjustdest(repo, rev, self.destmap, self.state, - self.skipped)) -self.state[rev] = dest -elif self.state[rev] == revtodo: -pos += 1 -ui.status(_('rebasing %s\n') % desc) -ui.progress(_("rebasing"), pos, ("%d:%s" % (rev, ctx)), -_('changesets'), total) -p1, p2, base = defineparents(repo, rev, self.destmap, - self.state, self.skipped, - self.obsoletenotrebased) -self.storestatus(tr=tr) -if len(repo[None].parents()) == 2: -repo.ui.debug('resuming interrupted rebase\n') +self._rebasenode(tr, rev, allowdivergence, progress) +return posholder[0] + +def _rebasenode(self, tr, rev, allowdivergence, progressfn): +repo, ui, opts = self.repo, self.ui, self.opts +dest = self.destmap[rev] +ctx = repo[rev] +desc = _ctxdesc(ctx) +if self.state[rev] == rev: +ui.status(_('already rebased %s\n') % desc) +elif (not allowdivergence + and rev in self.obsoletewithoutsuccessorindestination): +msg = _('note: not rebasing %s and its descendants as ' +'this would cause divergence\n') % desc +repo.ui.status(msg) +self.skipped.add(rev) +elif rev in self.obsoletenotrebased: +succ = self.obsoletenotrebased[rev] +if succ is None: +msg = _('note: not rebasing %s, it has no ' +'successor\n') % desc +else: +succdesc = _ctxdesc(repo[succ]) +msg = (_('note: not rebasing %s, already in ' + 'destination as %s\n') % (desc, succdesc)) +repo.ui.status(msg) +# Make clearrebased aware state[rev] is not a true successor +self.skipped.add(rev) +# Record rev as moved to its desired destination in self.state. +
D2809: rebase: extract function for rebasing a single node
martinvonz created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers. REVISION SUMMARY We currently have _performrebase() and _performrebasesubset(), but we don't have a method for rebasing a single node (that's inside a loop in _performrebasesubset()). I think it makes sense to have such a method, so that's what this patch does. I think it may simplify future patches I'm working on that have to do with transactions, but I think this patch makes sense on its own whether or not that future work happens. REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D2809 AFFECTED FILES hgext/rebase.py CHANGE DETAILS diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -430,115 +430,122 @@ ui.note(_('rebase merging completed\n')) def _performrebasesubset(self, tr, subset, pos, total): -repo, ui, opts = self.repo, self.ui, self.opts -sortedrevs = repo.revs('sort(%ld, -topo)', subset) +sortedrevs = self.repo.revs('sort(%ld, -topo)', subset) allowdivergence = self.ui.configbool( 'experimental', 'evolution.allowdivergence') if not allowdivergence: -sortedrevs -= repo.revs( +sortedrevs -= self.repo.revs( 'descendants(%ld) and not %ld', self.obsoletewithoutsuccessorindestination, self.obsoletewithoutsuccessorindestination, ) +posholder = [pos] +def progress(ctx): +posholder[0] += 1 +self.repo.ui.progress(_("rebasing"), posholder[0], + ("%d:%s" % (ctx.rev(), ctx)), _('changesets'), + total) for rev in sortedrevs: -dest = self.destmap[rev] -ctx = repo[rev] -desc = _ctxdesc(ctx) -if self.state[rev] == rev: -ui.status(_('already rebased %s\n') % desc) -elif (not allowdivergence - and rev in self.obsoletewithoutsuccessorindestination): -msg = _('note: not rebasing %s and its descendants as ' -'this would cause divergence\n') % desc -repo.ui.status(msg) -self.skipped.add(rev) -elif rev in self.obsoletenotrebased: -succ = self.obsoletenotrebased[rev] -if succ is None: -msg = _('note: not rebasing %s, it has no ' -'successor\n') % desc -else: -succdesc = _ctxdesc(repo[succ]) -msg = (_('note: not rebasing %s, already in ' - 'destination as %s\n') % (desc, succdesc)) -repo.ui.status(msg) -# Make clearrebased aware state[rev] is not a true successor -self.skipped.add(rev) -# Record rev as moved to its desired destination in self.state. -# This helps bookmark and working parent movement. -dest = max(adjustdest(repo, rev, self.destmap, self.state, - self.skipped)) -self.state[rev] = dest -elif self.state[rev] == revtodo: -pos += 1 -ui.status(_('rebasing %s\n') % desc) -ui.progress(_("rebasing"), pos, ("%d:%s" % (rev, ctx)), -_('changesets'), total) -p1, p2, base = defineparents(repo, rev, self.destmap, - self.state, self.skipped, - self.obsoletenotrebased) -self.storestatus(tr=tr) -if len(repo[None].parents()) == 2: -repo.ui.debug('resuming interrupted rebase\n') +self._rebasenode(tr, rev, allowdivergence, progress) +return posholder[0] + +def _rebasenode(self, tr, rev, allowdivergence, progressfn): +repo, ui, opts = self.repo, self.ui, self.opts +dest = self.destmap[rev] +ctx = repo[rev] +desc = _ctxdesc(ctx) +if self.state[rev] == rev: +ui.status(_('already rebased %s\n') % desc) +elif (not allowdivergence + and rev in self.obsoletewithoutsuccessorindestination): +msg = _('note: not rebasing %s and its descendants as ' +'this would cause divergence\n') % desc +repo.ui.status(msg) +self.skipped.add(rev) +elif rev in self.obsoletenotrebased: +succ = self.obsoletenotrebased[rev] +if succ is None: +msg = _('note: not rebasing %s, it has no ' +'successor\n') % desc +else: +succdesc = _ctxdesc(repo[succ]) +msg = (_('note: not rebasing %s, already in ' +