trivial: use git-repo-config to detect if the test can be run on the repository
[gitweb.git] / git-checkout.sh
index 73652fa5f367b8200a9fb05740c09cf12a72bc54..36308d22c6a72b9ad53ced60bd3c70a2e17520b6 100755 (executable)
@@ -1,5 +1,7 @@
 #!/bin/sh
-. git-sh-setup || die "Not a git archive"
+
+USAGE='[-f] [-b <new_branch>] [<branch>] [<paths>...]'
+. git-sh-setup
 
 old=$(git-rev-parse HEAD)
 new=
@@ -26,6 +28,9 @@ while [ "$#" != "0" ]; do
        --)
                break
                ;;
+       -*)
+               usage
+               ;;
        *)
                if rev=$(git-rev-parse --verify "$arg^0" 2>/dev/null)
                then
@@ -75,7 +80,6 @@ then
                # rescuing paths and is never meant to remove what
                # is not in the named tree-ish.
                git-ls-tree -r "$new" "$@" |
-               sed -ne 's/^\([0-7]*\) blob \(.*\)$/\1 \2/p' |
                git-update-index --index-info || exit $?
        fi
        git-checkout-index -f -u -- "$@"
@@ -112,14 +116,16 @@ else
 fi
 
 # 
-# Switch the HEAD pointer to the new branch if it we
+# Switch the HEAD pointer to the new branch if we
 # checked out a branch head, and remove any potential
 # old MERGE_HEAD's (subsequent commits will clearly not
 # be based on them, since we re-set the index)
 #
 if [ "$?" -eq 0 ]; then
        if [ "$newbranch" ]; then
-               echo $new > "$GIT_DIR/refs/heads/$newbranch"
+               leading=`expr "refs/heads/$newbranch" : '\(.*\)/'` &&
+               mkdir -p "$GIT_DIR/$leading" &&
+               echo $new >"$GIT_DIR/refs/heads/$newbranch" || exit
                branch="$newbranch"
        fi
        [ "$branch" ] &&