git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] clone: support cloning full bundles

From
SBSanti Béjar <sbejar@gmail.com>
Date
Dec 12, 2007, 10:48 UTC
Message-ID
<1197456485-22909-1-git-send-email-sbejar@gmail.com>
It still fails for incremental bundles.
Signed-off-by: Santi Béjar <sbejar@gmail.com>
---
Hi *,
Does anyone know how to create a repository from an incremental bundle?

Also, when a repo/bundle does not have a HEAD, clone does not setup the remote configs, is this the desired behavior?

I know that Kristian is working in the C conversion, I'll rebase this patch on top if that is prefered. Or maybe it will not be necessary at all, as "git fetch" supports bundles.

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 ecf9d89..a4a2124 100755
--- a/git-clone.sh
+++ b/git-clone.sh
@@ -206,11 +206,14 @@ fi
 if base=$(get_repo_base "$repo"); then
 	repo="$base"
 	local=yes
+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" ] &&
@@ -359,11 +362,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 822ac8c..a7e5a31 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
 '
@@ -63,4 +64,14 @@ test_expect_success 'Even without -l, local will make a hardlink' '
 	test 0 = $copied
 '
 
+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.3.7.2094.gff6c
Next: Johannes Schindelin
Message 1 of 5 in “clone: support cloning full bundles”
  1. clone: support cloning full bundlesSanti Béjar, Dec 12, 2007
  2. Johannes SchindelinDec 12, 2007
  3. Santi BéjarDec 12, 2007
  4. Johannes SchindelinDec 12, 2007
  5. Santi BéjarDec 13, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.