GIT v1.5.3-rc2
[gitweb.git] / git-clone.sh
index 4cbf60f554cee4560559cc3aa4e7d6fbb90e68ed..09225540e607c5337f6a4807a570d7e296a555b9 100755 (executable)
@@ -43,7 +43,7 @@ clone_dumb_http () {
        clone_tmp="$GIT_DIR/clone-tmp" &&
        mkdir -p "$clone_tmp" || exit 1
        if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
-               "`git-config --bool http.noEPSV`" = true ]; then
+               "`git config --bool http.noEPSV`" = true ]; then
                curl_extra_args="${curl_extra_args} --disable-epsv"
        fi
        http_fetch "$1/info/refs" "$clone_tmp/refs" ||
@@ -132,7 +132,7 @@ while
                */*)
                    die "'$2' is not suitable for an origin name"
                esac
-               git-check-ref-format "heads/$2" ||
+               git check-ref-format "heads/$2" ||
                    die "'$2' is not suitable for a branch name"
                test -z "$origin_override" ||
                    die "Do not give more than one --origin options."
@@ -187,15 +187,31 @@ dir="$2"
 # Try using "humanish" part of source repo if user didn't specify one
 [ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
 [ -e "$dir" ] && die "destination directory '$dir' already exists."
-mkdir -p "$dir" &&
-D=$(cd "$dir" && pwd) &&
-trap 'err=$?; cd ..; rm -rf "$D"; exit $err' 0
-case "$bare" in
-yes)
-       GIT_DIR="$D" ;;
-*)
-       GIT_DIR="$D/.git" ;;
-esac && export GIT_DIR && git-init ${template+"$template"} || usage
+[ yes = "$bare" ] && unset GIT_WORK_TREE
+[ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
+die "working tree '$GIT_WORK_TREE' already exists."
+D=
+W=
+cleanup() {
+       err=$?
+       test -z "$D" && rm -rf "$dir"
+       test -z "$W" && test -n "$GIT_WORK_TREE" && rm -rf "$GIT_WORK_TREE"
+       cd ..
+       test -n "$D" && rm -rf "$D"
+       test -n "$W" && rm -rf "$W"
+       exit $err
+}
+trap cleanup 0
+mkdir -p "$dir" && D=$(cd "$dir" && pwd) || usage
+test -n "$GIT_WORK_TREE" && mkdir -p "$GIT_WORK_TREE" &&
+W=$(cd "$GIT_WORK_TREE" && pwd) && export GIT_WORK_TREE="$W"
+if test yes = "$bare" || test -n "$GIT_WORK_TREE"; then
+       GIT_DIR="$D"
+else
+       GIT_DIR="$D/.git"
+fi &&
+export GIT_DIR &&
+git-init $quiet ${template+"$template"} || usage
 
 if test -n "$reference"
 then
@@ -345,11 +361,15 @@ then
                *)
                        continue ;;
                esac
-               git-update-ref -m "clone: from $repo" "$destname" "$sha1" ""
+               git update-ref -m "clone: from $repo" "$destname" "$sha1" ""
        done < "$GIT_DIR/CLONE_HEAD"
 fi
 
-cd "$D" || exit
+if test -n "$W"; then
+       cd "$W" || exit
+else
+       cd "$D" || exit
+fi
 
 if test -z "$bare" && test -f "$GIT_DIR/REMOTE_HEAD"
 then
@@ -389,31 +409,31 @@ then
        )
 
        # Upstream URL
-       git-config remote."$origin".url "$repo" &&
+       git config remote."$origin".url "$repo" &&
 
        # Set up the mappings to track the remote branches.
-       git-config remote."$origin".fetch \
+       git config remote."$origin".fetch \
                "+refs/heads/*:$remote_top/*" '^$' &&
 
        # Write out remote.$origin config, and update our "$head_points_at".
        case "$head_points_at" in
        ?*)
                # Local default branch
-               git-symbolic-ref HEAD "refs/heads/$head_points_at" &&
+               git symbolic-ref HEAD "refs/heads/$head_points_at" &&
 
                # Tracking branch for the primary branch at the remote.
-               git-update-ref HEAD "$head_sha1" &&
+               git update-ref HEAD "$head_sha1" &&
 
                rm -f "refs/remotes/$origin/HEAD"
-               git-symbolic-ref "refs/remotes/$origin/HEAD" \
+               git symbolic-ref "refs/remotes/$origin/HEAD" \
                        "refs/remotes/$origin/$head_points_at" &&
 
-               git-config branch."$head_points_at".remote "$origin" &&
-               git-config branch."$head_points_at".merge "refs/heads/$head_points_at"
+               git config branch."$head_points_at".remote "$origin" &&
+               git config branch."$head_points_at".merge "refs/heads/$head_points_at"
                ;;
        '')
                # Source had detached HEAD pointing nowhere
-               git-update-ref --no-deref HEAD "$head_sha1" &&
+               git update-ref --no-deref HEAD "$head_sha1" &&
                rm -f "refs/remotes/$origin/HEAD"
                ;;
        esac
@@ -421,7 +441,7 @@ then
        case "$no_checkout" in
        '')
                test "z$quiet" = z -a "z$no_progress" = z && v=-v || v=
-               git-read-tree -m -u $v HEAD HEAD
+               git read-tree -m -u $v HEAD HEAD
        esac
 fi
 rm -f "$GIT_DIR/CLONE_HEAD" "$GIT_DIR/REMOTE_HEAD"