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 1e818bb02dcad32095e5e14236d177360fe0f3a1..fec3b4f64ae847628e67904876d08533be85c9c7 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.
 
 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>
 Author
 ------
 Written by Junio C Hamano <junkio@cox.net>
index 959261757c1fd8df50f7894ba449b76d621f3c45..a3665d7751cc836dc669390df7b972c29575037b 100755 (executable)
@@ -83,8 +83,17 @@ merge_head=$(sed -e '/       not-for-merge   /d' \
 
 case "$merge_head" in
 '')
 
 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."
        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."