git-pull: disallow implicit merging to detached HEAD
authorJeff King <peff@peff.net>
Mon, 15 Jan 2007 22:25:33 +0000 (17:25 -0500)
committerJunio C Hamano <junkio@cox.net>
Mon, 15 Jan 2007 23:37:22 +0000 (15:37 -0800)
Instead, we complain to the user and suggest that they explicitly
specify the remote and branch. We depend on the exit status of
git-symbolic-ref, so let's go ahead and document that.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/git-symbolic-ref.txt
git-pull.sh

index 1e818bb..fec3b4f 100644 (file)
@@ -44,6 +44,10 @@ cumbersome.  On some platforms, `ln -sf` does not even work as
 advertised (horrors).  Therefore symbolic links are now deprecated
 and symbolic refs are used by default.
 
+git-symbolic-ref will exit with status 0 if the contents of the
+symbolic ref were printed correctly, with status 1 if the requested
+name is not a symbolic ref, or 128 if another error occurs.
+
 Author
 ------
 Written by Junio C Hamano <junkio@cox.net>
index 9592617..a3665d7 100755 (executable)
@@ -83,8 +83,17 @@ merge_head=$(sed -e '/       not-for-merge   /d' \
 
 case "$merge_head" in
 '')
-       curr_branch=$(git-symbolic-ref HEAD | \
-               sed -e 's|^refs/heads/||')
+       curr_branch=$(git-symbolic-ref -q HEAD)
+       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 $?;;
+       esac
+       curr_branch=${curr_branch#refs/heads/}
+
        echo >&2 "Warning: No merge candidate found because value of config option
          \"branch.${curr_branch}.merge\" does not match any remote branch fetched."
        echo >&2 "No changes."