[PATCHv2] clone: support cloning full bundles
From: Santi Béjar <hidden>
Date: 2016-06-15 22:44:17
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Santi Béjar <redacted> --- Hi *, while waiting for the C port of git-clone I've updated my patch to support bundles in "git clone". Santi git-clone.sh | 17 +++++++++++++---- t/t5701-clone-local.sh | 11 +++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/git-clone.sh b/git-clone.sh
index 0d686c3..2efb947 100755
--- a/git-clone.sh
+++ b/git-clone.sh@@ -210,11 +210,14 @@ if base=$(get_repo_base "$repo"); then then local=yes fi +elif [ -f "$repo" ] ; then + case "$repo" in /*);; *) repo="$PWD/$repo" ; esac fi 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') +[ -f "$dir" ] && dir=$(expr "$repo" : '.*/\([^/]*\)\.[^/]*') [ -e "$dir" ] && die "destination directory '$dir' already exists." [ yes = "$bare" ] && unset GIT_WORK_TREE [ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
@@ -364,11 +367,17 @@ yes) fi ;; *) - case "$upload_pack" in - '') 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" || + if [ -f "$repo" ] ; then + git bundle unbundle "$repo" > "$GIT_DIR/CLONE_HEAD" || + die "unbundle from '$repo' failed." + else + case "$upload_pack" in + '') 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." + fi ;; esac ;;
diff --git a/t/t5701-clone-local.sh b/t/t5701-clone-local.sh
index 59a165a..8a8e65c 100755
--- a/t/t5701-clone-local.sh
+++ b/t/t5701-clone-local.sh@@ -9,6 +9,7 @@ test_expect_success 'preparing origin repository' ' : >file && git add . && git commit -m1 && git clone --bare . a.git && git clone --bare . x && + git bundle create b1.bundle --all HEAD && test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true && test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true '
@@ -71,4 +72,14 @@ test_expect_success 'local clone of repo with nonexistent ref in HEAD' ' git fetch && test ! -e .git/refs/remotes/origin/HEAD' +test_expect_success 'bundle clone with suffix' ' + cd "$D" && + git clone b1.bundle +' + +test_expect_success 'bundle clone' ' + cd "$D" && + git clone b1.bundle bdl1 +' + test_done
--
1.5.4.3.293.gac81