[PATCH 2 of 2 v2] rebase: add flag to require destination

Ryan McElroy rm at fb.com
Tue Mar 14 20:56:16 EDT 2017


# HG changeset patch
# User Ryan McElroy <rmcelroy at fb.com>
# Date 1489538624 25200
#      Tue Mar 14 17:43:44 2017 -0700
# Node ID 8d8b783803f43d5e2d86916c39e9554139752fe6
# Parent  2dc26c57e60e7e7bf46a276e8a498a9746bd9271
rebase: add flag to require destination

In some mercurial workflows, the default destination for rebase does not
always work well and can lead to confusing behavior. With this flag enabled,
every rebase command will require passing an explicit destination, eliminating
this confusion.

diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -650,6 +650,16 @@ def rebase(ui, repo, **opts):
 
           hg rebase -r "branch(featureX)" -d 1.3 --keepbranches
 
+    Configuration Options:
+
+    You can make rebase require a destination if you set the following config
+    option:
+
+      [commands]
+      rebase.requiredest = False
+
+    Return Values:
+
     Returns 0 on success, 1 if nothing to rebase or there are
     unresolved conflicts.
 
@@ -663,6 +673,12 @@ def rebase(ui, repo, **opts):
 
         # Validate input and define rebasing points
         destf = opts.get('dest', None)
+
+        if ui.config('commands', 'rebase.requiredest', False):
+            if not destf:
+                raise error.Abort(_('you must specify a destination'),
+                                  hint=_('use: hg rebase -d REV'))
+
         srcf = opts.get('source', None)
         basef = opts.get('base', None)
         revf = opts.get('rev', [])
diff --git a/tests/test-rebase-base.t b/tests/test-rebase-base.t
--- a/tests/test-rebase-base.t
+++ b/tests/test-rebase-base.t
@@ -391,3 +391,25 @@ Multiple roots. Two children share two p
    /
   o  0: A
   
+Require a destination
+  $ cat >> $HGRCPATH <<EOF
+  > [commands]
+  > rebase.requiredest = True
+  > EOF
+  $ hg init repo
+  $ cd repo
+  $ echo a >> a
+  $ hg commit -qAm aa
+  $ echo b >> b
+  $ hg commit -qAm bb
+  $ hg up ".^"
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo c >> c
+  $ hg commit -qAm cc
+  $ hg rebase
+  abort: you must specify a destination
+  (use: hg rebase -d REV)
+  [255]
+  $ hg rebase -d 1
+  rebasing 2:5db65b93a12b "cc" (tip)
+  saved backup bundle to $TESTTMP/repo/.hg/strip-backup/5db65b93a12b-4fb789ec-backup.hg (glob)


More information about the Mercurial-devel mailing list