diff options
-rwxr-xr-x | git-clone-script | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/git-clone-script b/git-clone-script index 60dc2a9d88..909ccc5301 100755 --- a/git-clone-script +++ b/git-clone-script @@ -6,7 +6,7 @@ # Clone a repository into a different directory that does not yet exist. usage() { - echo >&2 "* git clone [-l] [-q] [-u <upload-pack>] <repo> <dir>" + echo >&2 "* git clone [-l [-s]] [-q] [-u <upload-pack>] <repo> <dir>" exit 1 } @@ -16,11 +16,14 @@ get_repo_base() { quiet= use_local=no +local_shared=no upload_pack= while case "$#,$1" in 0,*) break ;; *,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;; + *,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared) + local_shared=yes ;; *,-q|*,--quiet) quiet=-q ;; 1,-u|1,--upload-pack) usage ;; *,-u|*,--upload-pack) @@ -57,22 +60,30 @@ yes,yes) exit 1 } - # See if we can hardlink and drop "l" if not. - sample_file=$(cd "$repo" && \ - find objects -type f -print | sed -e 1q) + case "$local_shared" in + no) + # See if we can hardlink and drop "l" if not. + sample_file=$(cd "$repo" && \ + find objects -type f -print | sed -e 1q) - # objects directory should not be empty since we are cloning! - test -f "$repo/$sample_file" || exit + # objects directory should not be empty since we are cloning! + test -f "$repo/$sample_file" || exit - l= - if ln "$repo/$sample_file" "$D/.git/objects/sample" 2>/dev/null - then - l=l - fi && - rm -f "$D/.git/objects/sample" && - cd "$repo" && - find objects -type f -print | - cpio -puamd$l "$D/.git/" || exit 1 + l= + if ln "$repo/$sample_file" "$D/.git/objects/sample" 2>/dev/null + then + l=l + fi && + rm -f "$D/.git/objects/sample" && + cd "$repo" && + find objects -type f -print | + cpio -puamd$l "$D/.git/" || exit 1 + ;; + yes) + mkdir -p "$D/.git/objects/info" + echo "$repo/objects" >"$D/.git/objects/info/alternates" + ;; + esac # Make a duplicate of refs and HEAD pointer HEAD= |