git-upload-pack: Support the multi_ack protocol
[gitweb.git] / git-clone.sh
index 44135f489d55c29eb2e7dce1b892471c55b9914b..18e692a67b1515c57a20c8574ed53836fb53f2bd 100755 (executable)
@@ -9,7 +9,7 @@
 unset CDPATH
 
 usage() {
-       echo >&2 "* git clone [-l [-s]] [-q] [-u <upload-pack>] <repo> <dir>"
+       echo >&2 "* git clone [-l [-s]] [-q] [-u <upload-pack>] [-n] <repo> <dir>"
        exit 1
 }
 
@@ -53,7 +53,11 @@ Perhaps git-update-server-info needs to be run there?"
        while read sha1 refname
        do
                name=`expr "$refname" : 'refs/\(.*\)'` &&
-               git-http-fetch -v -a -w "$name" "$name" "$1/" || exit 1
+               case "$name" in
+               *^*)    ;;
+               *)
+                       git-http-fetch -v -a -w "$name" "$name" "$1/" || exit 1
+               esac
        done <"$clone_tmp/refs"
        rm -fr "$clone_tmp"
 }
@@ -61,10 +65,12 @@ Perhaps git-update-server-info needs to be run there?"
 quiet=
 use_local=no
 local_shared=no
+no_checkout=
 upload_pack=
 while
        case "$#,$1" in
        0,*) break ;;
+       *,-n) no_checkout=yes ;;
        *,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;;
         *,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared) 
           local_shared=yes ;;
@@ -139,7 +145,8 @@ yes,yes)
        then
                HEAD=HEAD
        fi
-       tar Ccf "$repo" - refs $HEAD | tar Cxf "$D/.git" - || exit 1
+       (cd "$repo" && tar cf - refs $HEAD) |
+       (cd "$D/.git" && tar xf -) || exit 1
        ;;
 *)
        case "$repo" in
@@ -185,9 +192,16 @@ yes,yes)
        ;;
 esac
 
-# Update origin.
-mkdir -p "$D/.git/remotes/" &&
-rm -f "$D/.git/remotes/origin" &&
-echo >"$D/.git/remotes/origin" \
-"URL: $repo
+cd $D || exit
+
+if test -f ".git/HEAD"
+then
+       mkdir -p .git/remotes || exit
+       echo >.git/remotes/origin \
+       "URL: $repo
 Pull: master:origin"
+       case "$no_checkout" in
+       '')
+               git checkout
+       esac
+fi