[prev in list] [next in list] [prev in thread] [next in thread] 

List:       git
Subject:    [PATCH] rebase: improve error message when upstream argument is
From:       Jonathan Nieder <jrnieder () gmail ! com>
Date:       2010-05-31 22:51:32
Message-ID: 20100531225132.GA6066 () progeny ! tock
[Download RAW message or body]

Strip out options before checking for a missing upstream argument.
Before:

 $ git rebase -m
 shift: 426: can't shift that many

After:

 $ git rebase -m
 Usage: git rebase ...

While at it, fix the usage message to explain that the upstream
argument is mandatory.

Reported-by: Jon Dowland <jmtd@debian.org>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
Jon Dowland wrote:

> jon@tchicaya:~/wd/web/crm114-spamd$ git rebase --onto origin/master
> shift: 426: can't shift that many

How about this patch?

 git-rebase.sh     |   17 ++++++++---------
 t/t3400-rebase.sh |   13 ++++++++++++-
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/git-rebase.sh b/git-rebase.sh
index 44f5c65..ab4afa7 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -3,7 +3,7 @@
 # Copyright (c) 2005 Junio C Hamano.
 #
 
-USAGE='[--interactive | -i] [-v] [--force-rebase | -f] [--no-ff] [--onto <newbase>] \
[<upstream>|--root] [<branch>] [--quiet | -q]' +USAGE='[--interactive | -i] [-v] \
[--force-rebase | -f] [--no-ff] [--onto <newbase>] (<upstream>|--root) [<branch>] \
[--quiet | -q]'  LONG_USAGE='git-rebase replaces <branch> with a new branch of the
 same name.  When the --onto option is provided the new branch starts
 out with a HEAD equal to <newbase>, otherwise it is equal to <upstream>
@@ -198,14 +198,6 @@ test -f "$GIT_DIR"/rebase-apply/applying &&
 
 is_interactive "$@" && exec git-rebase--interactive "$@"
 
-if test $# -eq 0
-then
-	test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply || usage
-	test -d "$dotest" -o -f "$GIT_DIR"/rebase-apply/rebasing &&
-		die 'A rebase is in progress, try --continue, --skip or --abort.'
-	die "No arguments given and $GIT_DIR/rebase-apply already exists."
-fi
-
 while test $# != 0
 do
 	case "$1" in
@@ -370,6 +362,13 @@ do
 done
 test $# -gt 2 && usage
 
+if test $# -eq 0 && test -z "$rebase_root"
+then
+	test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply || usage
+	test -d "$dotest" -o -f "$GIT_DIR"/rebase-apply/rebasing &&
+		die 'A rebase is in progress, try --continue, --skip or --abort.'
+fi
+
 # Make sure we do not have $GIT_DIR/rebase-apply
 if test -z "$do_merge"
 then
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index dbf7dfb..e5691bc 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -126,9 +126,20 @@ test_expect_success 'Show verbose error when HEAD could not be \
detached' '  test_must_fail git rebase topic 2> output.err > output.out &&
      grep "Untracked working tree file .B. would be overwritten" output.err
 '
+rm -f B
+
+test_expect_success 'dump usage when upstream arg is missing' '
+     git checkout -b usage topic &&
+     test_must_fail git rebase 2>error1 &&
+     grep "[Uu]sage" error1 &&
+     test_must_fail git rebase --abort 2>error2 &&
+     grep "No rebase in progress" error2 &&
+     test_must_fail git rebase --onto master 2>error3 &&
+     grep "[Uu]sage" error3 &&
+     ! grep "can.t shift" error3
+'
 
 test_expect_success 'rebase -q is quiet' '
-     rm B &&
      git checkout -b quiet topic &&
      git rebase -q master > output.out 2>&1 &&
      test ! -s output.out
-- 
1.7.1.349.g784ce.dirty

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic