git-lfs/t/t-multiple-remotes.sh
brian m. carlson b395534024
t: fix standalone tests on Windows
In our shell script tests, we can end up with paths that start with
things like "/tmp", which on Windows is implicitly rewritten into a real
Windows path by the shell.  However, when using the `urlify` function,
that doesn't happen and therefore Git LFS gets a path it cannot handle.

We used to paper over this by calling `cygpath -w` on all the paths we
were given, but the version of `cygpath` shipped with Git for Windows is
subtly broken and we don't want to rely on it anymore, so instead make
our `urlify` helper convert to a canonical native path and then prefix
with a slash if need be.

Similarly, use the `urlify` helper in the multiple remotes test to make
sure that the paths are rewritten properly.
2022-09-07 20:25:17 +00:00

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://$(urlify "$REMOTEDIR/$smain.git")"
git remote add fr "file://$(urlify "$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