git-lfs/t/t-multiple-remotes.sh

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