193 lines
4.2 KiB
Bash
Executable File
193 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Test lfs capability to download data when blobs are stored in different
|
|
# endpoints
|
|
|
|
. "$(dirname "$0")/testlib.sh"
|
|
|
|
# This feature depends on the treeish parameter that is provided as metadata
|
|
# in git versions higher or equal than 2.27
|
|
ensure_git_version_isnt $VERSION_LOWER "2.27.0"
|
|
|
|
reponame="$(basename "$0" ".sh")"
|
|
|
|
prepare_consumer() {
|
|
local consumer="$1"
|
|
mkdir "$consumer"
|
|
cd "$consumer"
|
|
git init
|
|
git remote add mr file://"$REMOTEDIR"/"$smain".git
|
|
git remote add fr file://"$REMOTEDIR"/"$sfork".git
|
|
git fetch mr
|
|
git fetch fr
|
|
}
|
|
|
|
prepare_forks () {
|
|
local testcase="$1"
|
|
smain="$reponame"-"$testcase"-main-remote
|
|
sfork="$reponame"-"$testcase"-fork-remote
|
|
cmain="$HOME"/"$reponame"-"$testcase"-main-repo
|
|
cfork="$HOME"/"$reponame"-"$testcase"-fork-repo
|
|
setup_remote_repo "$smain"
|
|
setup_remote_repo "$sfork"
|
|
prepare_consumer "$cmain"
|
|
git checkout -b main
|
|
git lfs track '*.bin'
|
|
git add --all
|
|
git commit -m "Initial commit"
|
|
git push -u mr main
|
|
git push -u fr main
|
|
#Add a .bin in main repo
|
|
touch a.bin
|
|
printf "1234" > a.bin
|
|
git add --all
|
|
git commit -m "Add Bin file"
|
|
git push mr main
|
|
prepare_consumer "$cfork"
|
|
}
|
|
|
|
exec_fail_git(){
|
|
set +e
|
|
git "$@"
|
|
res=$?
|
|
set -e
|
|
if [ "$res" = "0" ]; then
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
begin_test "accept reset to different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "a-reset"
|
|
git checkout fr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect true
|
|
git reset --hard mr/main
|
|
)
|
|
end_test
|
|
|
|
begin_test "accept pull from different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "a-pull"
|
|
git checkout fr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect true
|
|
git pull mr main
|
|
)
|
|
end_test
|
|
|
|
begin_test "accept checkout different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "a-checkout"
|
|
git checkout fr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect true
|
|
git checkout mr/main
|
|
)
|
|
end_test
|
|
|
|
begin_test "accept rebase different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "a-rebase"
|
|
git checkout fr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect true
|
|
git rebase mr/main
|
|
)
|
|
end_test
|
|
|
|
begin_test "accept add bin file with sparsecheckout"
|
|
(
|
|
set -e
|
|
prepare_forks "a-sparsecheckout"
|
|
git sparse-checkout init --no-cone
|
|
git sparse-checkout set /.gitignore
|
|
git checkout mr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect true
|
|
git sparse-checkout add a.bin
|
|
)
|
|
end_test
|
|
|
|
begin_test "accept cherry-pick head different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "a-cherrypick"
|
|
git checkout -b main --track fr/main
|
|
git config lfs.remote.searchall true
|
|
git config lfs.remote.autodetect false
|
|
git cherry-pick mr/main
|
|
)
|
|
end_test
|
|
|
|
begin_test "reject reset to different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "r-reset"
|
|
git checkout fr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect false
|
|
exec_fail_git reset --hard mr/main
|
|
)
|
|
end_test
|
|
|
|
begin_test "reject pull from different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "r-pull"
|
|
git checkout fr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect false
|
|
exec_fail_git pull mr main
|
|
)
|
|
end_test
|
|
|
|
begin_test "reject checkout different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "r-checkout"
|
|
git checkout fr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect false
|
|
exec_fail_git checkout mr/main
|
|
)
|
|
end_test
|
|
|
|
begin_test "reject rebase different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "r-rebase"
|
|
git checkout fr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect false
|
|
exec_fail_git rebase mr/main
|
|
)
|
|
end_test
|
|
|
|
begin_test "reject add bin file with sparsecheckout"
|
|
(
|
|
set -e
|
|
prepare_forks "r-sparsecheckout"
|
|
git sparse-checkout init --no-cone
|
|
git sparse-checkout set /.gitignore
|
|
git checkout mr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect false
|
|
exec_fail_git sparse-checkout add a.bin
|
|
)
|
|
end_test
|
|
|
|
begin_test "reject cherry-pick head different remote"
|
|
(
|
|
set -e
|
|
prepare_forks "r-cherrypick"
|
|
git checkout -b main --track fr/main
|
|
git config lfs.remote.searchall false
|
|
git config lfs.remote.autodetect false
|
|
exec_fail_git cherry-pick mr/main
|
|
)
|
|
end_test
|