[PATCH 1 of 4] rebase: move destination computation in a revset

Pierre-Yves David pierre-yves.david at ens-lyon.org
Mon Sep 21 22:16:35 UTC 2015


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1442512792 25200
#      Thu Sep 17 10:59:52 2015 -0700
# Node ID 4a5d8f70d71f914b85b415b2dfb7a7448e9137e5
# Parent  4b685712fa454919c121d8d1c967da35b0522dd5
rebase: move destination computation in a revset

This is the first step toward making the "default destination" logic more clear
and unified. revset is private because I'm happy to delay the bikeshedding until
after the clean up happened.

diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -14,11 +14,11 @@ For more information:
 http://mercurial.selenic.com/wiki/RebaseExtension
 '''
 
 from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks
 from mercurial import extensions, patch, scmutil, phases, obsolete, error
-from mercurial import copies, repoview
+from mercurial import copies, repoview, revset
 from mercurial.commands import templateopts
 from mercurial.node import nullrev, nullid, hex, short
 from mercurial.lock import release
 from mercurial.i18n import _
 import os, errno
@@ -52,10 +52,26 @@ def _makeextrafn(copiers):
     def extrafn(ctx, extra):
         for c in copiers:
             c(ctx, extra)
     return extrafn
 
+def _rebasedefaultdest(repo, subset, x):
+    """``_rebasedefaultdest()``
+
+    default destination for rebase.
+    # XXX: Currently private because I expect the signature to change.
+    # XXX: - taking rev as arguments,
+    # XXX: - bailing out in case of ambiguity vs returning all data.
+    # XXX: - probably merging with the merge destination.
+    """
+    # i18n: "_rebasedefaultdest" is a keyword
+    # Destination defaults to the latest revision in the
+    # current branch
+    revset.getargs(x, 0, 0, _("_rebasedefaultdest takes no arguments"))
+    branch = repo[None].branch()
+    return subset & revset.baseset([repo[branch].rev()])
+
 @command('rebase',
     [('s', 'source', '',
      _('rebase the specified changeset and descendants'), _('REV')),
     ('b', 'base', '',
      _('rebase everything from branching point of specified changeset'),
@@ -250,16 +266,12 @@ def rebase(ui, repo, **opts):
 
             cmdutil.checkunfinished(repo)
             cmdutil.bailifchanged(repo)
 
             if not destf:
-                # Destination defaults to the latest revision in the
-                # current branch
-                branch = repo[None].branch()
-                dest = repo[branch]
-            else:
-                dest = scmutil.revsingle(repo, destf)
+                destf = '_rebasedefaultdest()'
+            dest = scmutil.revsingle(repo, destf)
 
             if revf:
                 rebaseset = scmutil.revrange(repo, revf)
                 if not rebaseset:
                     ui.status(_('empty "rev" revision set - '
@@ -1124,5 +1136,6 @@ def uisetup(ui):
     cmdutil.unfinishedstates.append(
         ['rebasestate', False, False, _('rebase in progress'),
          _("use 'hg rebase --continue' or 'hg rebase --abort'")])
     # ensure rebased rev are not hidden
     extensions.wrapfunction(repoview, '_getdynamicblockers', _rebasedvisible)
+    revset.symbols['_rebasedefaultdest'] = _rebasedefaultdest


More information about the Mercurial-devel mailing list