зеркало из https://github.com/microsoft/git.git
clone: support cloning full bundles
The "humanish" part of a bundle is made removing the ".bundle" suffix. Signed-off-by: Santi Béjar <sbejar@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
97b97c58e6
Коммит
c6fef0bbea
27
git-clone.sh
27
git-clone.sh
|
@ -210,11 +210,28 @@ if base=$(get_repo_base "$repo"); then
|
||||||
then
|
then
|
||||||
local=yes
|
local=yes
|
||||||
fi
|
fi
|
||||||
|
elif test -f "$repo"
|
||||||
|
then
|
||||||
|
case "$repo" in /*) ;; *) repo="$PWD/$repo" ;; esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Decide the directory name of the new repository
|
||||||
|
if test -n "$2"
|
||||||
|
then
|
||||||
dir="$2"
|
dir="$2"
|
||||||
|
else
|
||||||
|
# Derive one from the repository name
|
||||||
# Try using "humanish" part of source repo if user didn't specify one
|
# 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')
|
if test -f "$repo"
|
||||||
|
then
|
||||||
|
# Cloning from a bundle
|
||||||
|
dir=$(echo "$repo" | sed -e 's|/*\.bundle$||' -e 's|.*/||g')
|
||||||
|
else
|
||||||
|
dir=$(echo "$repo" |
|
||||||
|
sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
[ -e "$dir" ] && die "destination directory '$dir' already exists."
|
[ -e "$dir" ] && die "destination directory '$dir' already exists."
|
||||||
[ yes = "$bare" ] && unset GIT_WORK_TREE
|
[ yes = "$bare" ] && unset GIT_WORK_TREE
|
||||||
[ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
|
[ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
|
||||||
|
@ -364,11 +381,17 @@ yes)
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
if [ -f "$repo" ] ; then
|
||||||
|
git bundle unbundle "$repo" > "$GIT_DIR/CLONE_HEAD" ||
|
||||||
|
die "unbundle from '$repo' failed."
|
||||||
|
else
|
||||||
case "$upload_pack" in
|
case "$upload_pack" in
|
||||||
'') git-fetch-pack --all -k $quiet $depth $no_progress "$repo";;
|
'') git-fetch-pack --all -k $quiet $depth $no_progress "$repo";;
|
||||||
*) git-fetch-pack --all -k $quiet "$upload_pack" $depth $no_progress "$repo" ;;
|
*) git-fetch-pack --all -k \
|
||||||
|
$quiet "$upload_pack" $depth $no_progress "$repo" ;;
|
||||||
esac >"$GIT_DIR/CLONE_HEAD" ||
|
esac >"$GIT_DIR/CLONE_HEAD" ||
|
||||||
die "fetch-pack from '$repo' failed."
|
die "fetch-pack from '$repo' failed."
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -11,6 +11,11 @@ test_expect_success 'preparing origin repository' '
|
||||||
git clone --bare . x &&
|
git clone --bare . x &&
|
||||||
test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true &&
|
test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true &&
|
||||||
test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true
|
test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true
|
||||||
|
git bundle create b1.bundle --all HEAD &&
|
||||||
|
git bundle create b2.bundle --all &&
|
||||||
|
mkdir dir &&
|
||||||
|
cp b1.bundle dir/b3
|
||||||
|
cp b1.bundle b4
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'local clone without .git suffix' '
|
test_expect_success 'local clone without .git suffix' '
|
||||||
|
@ -71,4 +76,44 @@ test_expect_success 'local clone of repo with nonexistent ref in HEAD' '
|
||||||
git fetch &&
|
git fetch &&
|
||||||
test ! -e .git/refs/remotes/origin/HEAD'
|
test ! -e .git/refs/remotes/origin/HEAD'
|
||||||
|
|
||||||
|
test_expect_success 'bundle clone without .bundle suffix' '
|
||||||
|
cd "$D" &&
|
||||||
|
git clone dir/b3 &&
|
||||||
|
cd b3 &&
|
||||||
|
git fetch
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'bundle clone with .bundle suffix' '
|
||||||
|
cd "$D" &&
|
||||||
|
git clone b1.bundle &&
|
||||||
|
cd b1 &&
|
||||||
|
git fetch
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'bundle clone from b4' '
|
||||||
|
cd "$D" &&
|
||||||
|
git clone b4 bdl &&
|
||||||
|
cd bdl &&
|
||||||
|
git fetch
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'bundle clone from b4.bundle that does not exist' '
|
||||||
|
cd "$D" &&
|
||||||
|
if git clone b4.bundle bb
|
||||||
|
then
|
||||||
|
echo "Oops, should have failed"
|
||||||
|
false
|
||||||
|
else
|
||||||
|
echo happy
|
||||||
|
fi
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'bundle clone with nonexistent HEAD' '
|
||||||
|
cd "$D" &&
|
||||||
|
git clone b2.bundle b2 &&
|
||||||
|
cd b2 &&
|
||||||
|
git fetch
|
||||||
|
test ! -e .git/refs/heads/master
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Загрузка…
Ссылка в новой задаче