X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=git-clone.sh;h=513b574d13858f1a81e6f66251890d81bf0e55ce;hb=40250af411f33afa0c39a5d461829b676453ce3b;hp=171099674d1d89f5017dc77787c1fbff96154743;hpb=1f7d1a53fed40608e76200f941e6689b53752747;p=git.git diff --git a/git-clone.sh b/git-clone.sh index 171099674..513b574d1 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -42,6 +42,7 @@ clone_dumb_http () { http_fetch "$1/info/refs" "$clone_tmp/refs" || die "Cannot get remote repository information. Perhaps git-update-server-info needs to be run there?" + test "z$quiet" = z && v=-v || v= while read sha1 refname do name=`expr "z$refname" : 'zrefs/\(.*\)'` && @@ -59,7 +60,7 @@ Perhaps git-update-server-info needs to be run there?" else tname=$name fi - git-http-fetch -v -a -w "$tname" "$name" "$1/" || exit 1 + git-http-fetch $v -a -w "$tname" "$name" "$1" || exit 1 done <"$clone_tmp/refs" rm -fr "$clone_tmp" http_fetch "$1/HEAD" "$GIT_DIR/REMOTE_HEAD" || @@ -79,6 +80,8 @@ origin= origin_override= use_separate_remote=t depth= +no_progress= +test -t 1 || no_progress=--no-progress while case "$#,$1" in 0,*) break ;; @@ -178,46 +181,32 @@ esac && export GIT_DIR && git-init ${template+"$template"} || usage if test -n "$reference" then + ref_git= if test -d "$reference" then if test -d "$reference/.git/objects" then - reference="$reference/.git" + ref_git="$reference/.git" + elif test -d "$reference/objects" + then + ref_git="$reference" fi - reference=$(cd "$reference" && pwd) - echo "$reference/objects" >"$GIT_DIR/objects/info/alternates" - (cd "$reference" && tar cf - refs) | - (cd "$GIT_DIR/refs" && - mkdir reference-tmp && - cd reference-tmp && - tar xf - && - find refs ! -type d -print | - while read ref - do - if test -h "$ref" - then - # Old-style symbolic link ref. Not likely - # to appear under refs/ but we might as well - # deal with them. - : - elif test -f "$ref" - then - point=$(cat "$ref") && - case "$point" in - 'ref: '*) ;; - *) continue ;; - esac - fi - # The above makes true ref to 'continue' and - # we will come here when we are looking at - # symbolic link ref or a textual symref (or - # garbage, like fifo). - # The true ref pointed at by it is enough to - # ensure that we do not fetch objects reachable - # from it. - rm -f "$ref" - done - ) + fi + if test -n "$ref_git" + then + ref_git=$(cd "$ref_git" && pwd) + echo "$ref_git/objects" >"$GIT_DIR/objects/info/alternates" + ( + GIT_DIR="$ref_git" git for-each-ref \ + --format='%(objectname) %(*objectname)' + ) | + while read a b + do + test -z "$a" || + git update-ref "refs/reference-tmp/$a" "$a" + test -z "$b" || + git update-ref "refs/reference-tmp/$b" "$b" + done else die "reference repository '$reference' is not a local directory." fi @@ -304,8 +293,8 @@ yes,yes) ;; *) case "$upload_pack" in - '') git-fetch-pack --all -k $quiet $depth "$repo" ;; - *) git-fetch-pack --all -k $quiet "$upload_pack" $depth "$repo" ;; + '') git-fetch-pack --all -k $quiet $depth $no_progress "$repo";; + *) git-fetch-pack --all -k $quiet "$upload_pack" $depth $no_progress "$repo" ;; esac >"$GIT_DIR/CLONE_HEAD" || die "fetch-pack from '$repo' failed." ;; @@ -407,7 +396,7 @@ then case "$no_checkout" in '') - test "z$quiet" = z && v=-v || v= + test "z$quiet" = z -a "z$no_progress" = z && v=-v || v= git-read-tree -m -u $v HEAD HEAD esac fi