git-cvsimport: Handle "Removed" from pserver
[git.git] / git-checkout.sh
index d99688f..a11c939 100755 (executable)
@@ -22,7 +22,7 @@ while [ "$#" != "0" ]; do
                [ -e "$GIT_DIR/refs/heads/$newbranch" ] &&
                        die "git checkout: branch $newbranch already exists"
                git-check-ref-format "heads/$newbranch" ||
-                       die "we do not like '$newbranch' as a branch name."
+                       die "git checkout: we do not like '$newbranch' as a branch name."
                ;;
        "-f")
                force=1
@@ -75,9 +75,15 @@ done
 
 if test "$#" -ge 1
 then
+       hint=
+       if test "$#" -eq 1
+       then
+               hint="
+Did you intend to checkout '$@' which can not be resolved as commit?"
+       fi
        if test '' != "$newbranch$force$merge"
        then
-               die "updating paths and switching branches or forcing are incompatible."
+               die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
        fi
        if test '' != "$new"
        then
@@ -117,7 +123,8 @@ fi
 
 [ -z "$branch$newbranch" ] &&
        [ "$new" != "$old" ] &&
-       die "git checkout: you need to specify a new branch name"
+       die "git checkout: to checkout the requested commit you need to specify 
+              a name for a new branch which is created and switched to"
 
 if [ "$force" ]
 then
@@ -137,7 +144,7 @@ else
        work=`git write-tree` &&
        git read-tree --reset $new &&
        git checkout-index -f -u -q -a &&
-       git read-tree -m -u $old $new $work || exit
+       git read-tree -m -u --aggressive $old $new $work || exit
 
        if result=`git write-tree 2>/dev/null`
        then
@@ -165,7 +172,10 @@ else
        exit 0
     )
     saved_err=$?
-    git diff-files --name-status
+    if test "$saved_err" = 0
+    then
+       test "$new" = "$old" || git diff-index --name-status "$new"
+    fi
     (exit $saved_err)
 fi