зеркало из 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
37
git-clone.sh
37
git-clone.sh
|
@ -210,11 +210,28 @@ if base=$(get_repo_base "$repo"); then
|
|||
then
|
||||
local=yes
|
||||
fi
|
||||
elif test -f "$repo"
|
||||
then
|
||||
case "$repo" in /*) ;; *) repo="$PWD/$repo" ;; esac
|
||||
fi
|
||||
|
||||
# Decide the directory name of the new repository
|
||||
if test -n "$2"
|
||||
then
|
||||
dir="$2"
|
||||
else
|
||||
# Derive one from the repository name
|
||||
# Try using "humanish" part of source repo if user didn't specify one
|
||||
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
|
||||
|
||||
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')
|
||||
[ -e "$dir" ] && die "destination directory '$dir' already exists."
|
||||
[ yes = "$bare" ] && unset GIT_WORK_TREE
|
||||
[ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
|
||||
|
@ -364,11 +381,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
|
||||
;;
|
||||
|
|
|
@ -11,6 +11,11 @@ test_expect_success 'preparing origin repository' '
|
|||
git clone --bare . x &&
|
||||
test "$(GIT_CONFIG=a.git/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' '
|
||||
|
@ -71,4 +76,44 @@ 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 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
|
||||
|
|
Загрузка…
Ссылка в новой задаче