git-daemon --base-path
[gitweb.git] / git-checkout.sh
index 4c08f36b591508b5d940384db603e2f4483116d6..3bbd1117739b02572aece86030bb9f02f3110d34 100755 (executable)
@@ -1,9 +1,8 @@
 #!/bin/sh
-. git-sh-setup || die "Not a git archive"
 
-usage () {
-    die "usage: git checkout [-f] [-b <new_branch>] [<branch>] [<paths>...]"
-}
+USAGE='[-f] [-b <new_branch>] [<branch>] [<paths>...]'
+SUBDIRECTORY_OK=Sometimes
+. git-sh-setup
 
 old=$(git-rev-parse HEAD)
 new=
@@ -81,8 +80,7 @@ then
                # from a specific tree-ish; note that this is for
                # 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-ls-tree --full-name -r "$new" "$@" |
                git-update-index --index-info || exit $?
        fi
        git-checkout-index -f -u -- "$@"
@@ -98,6 +96,14 @@ else
        fi
 fi
 
+# We are switching branches and checking out trees, so
+# we *NEED* to be at the toplevel.
+cdup=$(git-rev-parse --show-cdup)
+if test ! -z "$cdup"
+then
+       cd "$cdup"
+fi
+
 [ -z "$new" ] && new=$old
 
 # If we don't have an old branch that we're switching to,
@@ -119,7 +125,7 @@ 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)