Code

"git pull --tags": error out with a better message.
authorJunio C Hamano <gitster@pobox.com>
Fri, 28 Dec 2007 21:58:43 +0000 (13:58 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sat, 29 Dec 2007 05:01:24 +0000 (21:01 -0800)
When "git pull --tags" is run without any other arguments, the
standard error message "You told me to fetch and merge stuff but
there is nothing to merge!  You might want to fix your config"
is given.

While the error may be technically correct, fixing the config
would not help, as "git pull --tags" itself tells "git fetch"
not to use the configured refspecs.

This commit makes "git pull --tags" to issue a different error
message to avoid confusion.  This is merely an interim solution.

In the longer term, it would be a better approach to change the
semantics of --tags option to make "git fetch" and "git pull"
to:

 (1) behave as if no --tags was given (so an explicit refspec on
     the command line overrides configured ones, or no explicit
     refspecs on the command line takes configured ones); but

 (2) no auto-following of tags is made even when using
     configured refspecs; and

 (3) fetch all tags as not-for-merge entries".

Then we would not need to have this separate error message, as
the ordinary merge will happen even with the --tags option.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-pull.sh

index 698e82b116d64236b80b7d6b9ae687aadba07afe..fa97b0f3562ab34b7cf1b7b68b293d9174121088 100755 (executable)
@@ -72,6 +72,40 @@ do
        shift
 done
 
+error_on_no_merge_candidates () {
+       exec >&2
+       for opt
+       do
+               case "$opt" in
+               -t|--t|--ta|--tag|--tags)
+                       echo "Fetching tags only, you probably meant:"
+                       echo "  git fetch --tags"
+                       exit 1
+               esac
+       done
+
+       curr_branch=${curr_branch#refs/heads/}
+
+       echo "You asked me to pull without telling me which branch you"
+       echo "want to merge with, and 'branch.${curr_branch}.merge' in"
+       echo "your configuration file does not tell me either.  Please"
+       echo "name which branch you want to merge on the command line and"
+       echo "try again (e.g. 'git pull <repository> <refspec>')."
+       echo "See git-pull(1) for details on the refspec."
+       echo
+       echo "If you often merge with the same branch, you may want to"
+       echo "configure the following variables in your configuration"
+       echo "file:"
+       echo
+       echo "    branch.${curr_branch}.remote = <nickname>"
+       echo "    branch.${curr_branch}.merge = <remote-ref>"
+       echo "    remote.<nickname>.url = <url>"
+       echo "    remote.<nickname>.fetch = <refspec>"
+       echo
+       echo "See git-config(1) for details."
+       exit 1
+}
+
 orig_head=$(git rev-parse --verify HEAD 2>/dev/null)
 git-fetch --update-head-ok "$@" || exit 1
 
@@ -105,33 +139,13 @@ merge_head=$(sed -e '/    not-for-merge   /d' \
 case "$merge_head" in
 '')
        case $? in
-         0) ;;
-         1) echo >&2 "You are not currently on a branch; you must explicitly"
-            echo >&2 "specify which branch you wish to merge:"
-            echo >&2 "  git pull <remote> <branch>"
-            exit 1;;
-         *) exit $?;;
+       0) error_on_no_merge_candidates "$@";;
+       1) echo >&2 "You are not currently on a branch; you must explicitly"
+          echo >&2 "specify which branch you wish to merge:"
+          echo >&2 "  git pull <remote> <branch>"
+          exit 1;;
+       *) exit $?;;
        esac
-       curr_branch=${curr_branch#refs/heads/}
-
-       echo >&2 "You asked me to pull without telling me which branch you"
-       echo >&2 "want to merge with, and 'branch.${curr_branch}.merge' in"
-       echo >&2 "your configuration file does not tell me either.  Please"
-       echo >&2 "name which branch you want to merge on the command line and"
-       echo >&2 "try again (e.g. 'git pull <repository> <refspec>')."
-       echo >&2 "See git-pull(1) for details on the refspec."
-       echo >&2
-       echo >&2 "If you often merge with the same branch, you may want to"
-       echo >&2 "configure the following variables in your configuration"
-       echo >&2 "file:"
-       echo >&2
-       echo >&2 "    branch.${curr_branch}.remote = <nickname>"
-       echo >&2 "    branch.${curr_branch}.merge = <remote-ref>"
-       echo >&2 "    remote.<nickname>.url = <url>"
-       echo >&2 "    remote.<nickname>.fetch = <refspec>"
-       echo >&2
-       echo >&2 "See git-config(1) for details."
-       exit 1
        ;;
 ?*' '?*)
        if test -z "$orig_head"