D2809: rebase: extract function for rebasing a single node

2018-03-13 Thread martinvonz (Martin von Zweigbergk)
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

2018-03-12 Thread martinvonz (Martin von Zweigbergk)
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 '
+