changeset 30725:c2bd2f77965b

rebase: fail-fast the pull if working dir is not clean (BC) Refuse to run 'hg pull --rebase' if there are uncommitted changes: so that instead of going ahead with fetching changes and then suddenly aborting the rebase, we can warn user of uncommitted changes (or unclean repo state) right up front. In tests, we create a 'histedit' session to verify that also an unfinished state is detected and handled.
author Valters Vingolds <valters@vingolds.ch>
date Sun, 01 Jan 2017 13:16:29 +0100
parents ee47e951c6f9
children dd897eb1699e
files hgext/rebase.py tests/test-rebase-pull.t
diffstat 2 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/rebase.py	Fri Jan 06 22:50:04 2017 +0900
+++ b/hgext/rebase.py	Sun Jan 01 13:16:29 2017 +0100
@@ -1316,6 +1316,10 @@
                 ui.debug('--update and --rebase are not compatible, ignoring '
                          'the update flag\n')
 
+            ui.debug('before rebase: ensure working dir is clean\n')
+            cmdutil.checkunfinished(repo)
+            cmdutil.bailifchanged(repo)
+
             revsprepull = len(repo)
             origpostincoming = commands.postincoming
             def _dummy(*args, **kwargs):
--- a/tests/test-rebase-pull.t	Fri Jan 06 22:50:04 2017 +0900
+++ b/tests/test-rebase-pull.t	Sun Jan 01 13:16:29 2017 +0100
@@ -1,6 +1,7 @@
   $ cat >> $HGRCPATH <<EOF
   > [extensions]
   > rebase=
+  > histedit=
   > 
   > [alias]
   > tglog = log -G --template "{rev}: '{desc}' {branches}\n"
@@ -72,6 +73,27 @@
   searching for changes
   no changes found
 
+Abort pull early if working dir is not clean:
+
+  $ echo L1-mod > L1
+  $ hg pull --rebase
+  abort: uncommitted changes
+  [255]
+  $ hg update --clean --quiet
+
+Abort pull early if another operation (histedit) is in progress:
+
+  $ hg histedit . -q --commands - << EOF
+  > edit d80cc2da061e histedit: generate unfinished state
+  > EOF
+  Editing (d80cc2da061e), you may commit or record as needed now.
+  (hg histedit --continue to resume)
+  [1]
+  $ hg pull --rebase
+  abort: histedit in progress
+  (use 'hg histedit --continue' or 'hg histedit --abort')
+  [255]
+  $ hg histedit --abort --quiet
 
 Invoke pull --rebase and nothing to rebase: