7646075431
When a custom transfer adapter is specified in the configuration, it is not possible to specify multiple arguments to the process, because only the last value of the lfs.customtransfer.*.args option is read and the value is not split. To make things easier and more flexible, concatenate the path (after quoting) and the arguments and pass them to the shell. Update the documentation to reflect this change. Update the test custom transfer adapter to parse its arguments (which are otherwise ignored) and mention them to standard error. Make the test check that the arguments are parsed as the shell would expect them to be.
286 lines
9.4 KiB
Bash
Executable File
286 lines
9.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
. "$(dirname "$0")/testlib.sh"
|
|
|
|
begin_test "custom-transfer-wrong-path"
|
|
(
|
|
set -e
|
|
|
|
# this repo name is the indicator to the server to support custom transfer
|
|
reponame="test-custom-transfer-fail"
|
|
setup_remote_repo "$reponame"
|
|
|
|
clone_repo "$reponame" $reponame
|
|
|
|
# deliberately incorrect path
|
|
git config lfs.customtransfer.testcustom.path path-to-nothing
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
|
|
contents="jksgdfljkgsdlkjafg lsjdgf alkjgsd lkfjag sldjkgf alkjsgdflkjagsd kljfg asdjgf kalsd"
|
|
contents_oid=$(calc_oid "$contents")
|
|
|
|
printf "%s" "$contents" > a.dat
|
|
git add a.dat
|
|
git add .gitattributes
|
|
git commit -m "add a.dat" 2>&1 | tee commit.log
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin master 2>&1 | tee pushcustom.log
|
|
# use PIPESTATUS otherwise we get exit code from tee
|
|
res=${PIPESTATUS[0]}
|
|
grep "xfer: adapter \"testcustom\" Begin()" pushcustom.log
|
|
grep "xfer: Aborting worker process" pushcustom.log
|
|
if [ "$res" = "0" ]; then
|
|
echo "Push should have failed because of an incorrect custom transfer path."
|
|
exit 1
|
|
fi
|
|
|
|
)
|
|
end_test
|
|
|
|
begin_test "custom-transfer-upload-download"
|
|
(
|
|
set -e
|
|
|
|
# this repo name is the indicator to the server to support custom transfer
|
|
reponame="test-custom-transfer-1"
|
|
setup_remote_repo "$reponame"
|
|
|
|
clone_repo "$reponame" $reponame
|
|
|
|
# set up custom transfer adapter
|
|
git config lfs.customtransfer.testcustom.path lfstest-customadapter
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
git add .gitattributes
|
|
git commit -m "Tracking"
|
|
|
|
# set up a decent amount of data so that there's work for multiple concurrent adapters
|
|
echo "[
|
|
{
|
|
\"CommitDate\":\"$(get_date -10d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"},
|
|
{\"Filename\":\"file1.dat\",\"Size\":1024},
|
|
{\"Filename\":\"file2.dat\",\"Size\":750}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -7d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file1.dat\",\"Size\":1050},
|
|
{\"Filename\":\"file3.dat\",\"Size\":660},
|
|
{\"Filename\":\"file4.dat\",\"Size\":230}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -5d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file5.dat\",\"Size\":1200},
|
|
{\"Filename\":\"file6.dat\",\"Size\":300}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -2d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file3.dat\",\"Size\":120},
|
|
{\"Filename\":\"file5.dat\",\"Size\":450},
|
|
{\"Filename\":\"file7.dat\",\"Size\":520},
|
|
{\"Filename\":\"file8.dat\",\"Size\":2048}]
|
|
}
|
|
]" | lfstest-testutils addcommits
|
|
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin master 2>&1 | tee pushcustom.log
|
|
# use PIPESTATUS otherwise we get exit code from tee
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
grep "xfer: started custom adapter process" pushcustom.log
|
|
grep "xfer\[lfstest-customadapter\]:" pushcustom.log
|
|
grep "Uploading LFS objects: 100% (12/12)" pushcustom.log
|
|
|
|
rm -rf .git/lfs/objects
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
grep "xfer: started custom adapter process" fetchcustom.log
|
|
grep "xfer\[lfstest-customadapter\]:" fetchcustom.log
|
|
|
|
grep "Terminating test custom adapter gracefully" fetchcustom.log
|
|
|
|
objectlist=`find .git/lfs/objects -type f`
|
|
[ "$(echo "$objectlist" | wc -l)" -eq 12 ]
|
|
)
|
|
end_test
|
|
|
|
begin_test "custom-transfer-standalone"
|
|
(
|
|
set -e
|
|
|
|
# setup a git repo to be used as a local repo, not remote
|
|
reponame="test-custom-transfer-standalone"
|
|
setup_remote_repo "$reponame"
|
|
|
|
# clone directly, not through lfstest-gitserver
|
|
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
|
|
|
|
# set up custom transfer adapter to use a specific transfer agent
|
|
git config lfs.customtransfer.testcustom.path lfstest-standalonecustomadapter
|
|
git config lfs.customtransfer.testcustom.args "--arg1 '--arg2 --arg3' --arg4"
|
|
git config lfs.customtransfer.testcustom.concurrent false
|
|
git config lfs.standalonetransferagent testcustom
|
|
export TEST_STANDALONE_BACKUP_PATH="$(pwd)/test-custom-transfer-standalone-backup"
|
|
mkdir -p $TEST_STANDALONE_BACKUP_PATH
|
|
rm -rf $TEST_STANDALONE_BACKUP_PATH/*
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
git add .gitattributes
|
|
git commit -m "Tracking"
|
|
|
|
# set up a decent amount of data so that there's work for multiple concurrent adapters
|
|
echo "[
|
|
{
|
|
\"CommitDate\":\"$(get_date -10d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"},
|
|
{\"Filename\":\"file1.dat\",\"Size\":1024},
|
|
{\"Filename\":\"file2.dat\",\"Size\":750}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -7d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file1.dat\",\"Size\":1050},
|
|
{\"Filename\":\"file3.dat\",\"Size\":660},
|
|
{\"Filename\":\"file4.dat\",\"Size\":230}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -5d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file5.dat\",\"Size\":1200},
|
|
{\"Filename\":\"file6.dat\",\"Size\":300}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -2d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file3.dat\",\"Size\":120},
|
|
{\"Filename\":\"file5.dat\",\"Size\":450},
|
|
{\"Filename\":\"file7.dat\",\"Size\":520},
|
|
{\"Filename\":\"file8.dat\",\"Size\":2048}]
|
|
}
|
|
]" | lfstest-testutils addcommits
|
|
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin master 2>&1 | tee pushcustom.log
|
|
# use PIPESTATUS otherwise we get exit code from tee
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
# Make sure the lock verification is not attempted.
|
|
grep "locks/verify$" pushcustom.log && false
|
|
|
|
grep "xfer: started custom adapter process" pushcustom.log
|
|
grep "xfer\[lfstest-standalonecustomadapter\]:" pushcustom.log
|
|
grep "Uploading LFS objects: 100% (12/12)" pushcustom.log
|
|
|
|
rm -rf .git/lfs/objects
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
grep "xfer: started custom adapter process" fetchcustom.log
|
|
grep "xfer\[lfstest-standalonecustomadapter\]:" fetchcustom.log
|
|
grep "Downloading LFS objects: 100% (12/12)" fetchcustom.log
|
|
|
|
grep "Terminating test custom adapter gracefully" fetchcustom.log
|
|
|
|
# Test argument parsing.
|
|
grep 'Saw argument "--arg1"' fetchcustom.log
|
|
grep 'Saw argument "--arg2 --arg3"' fetchcustom.log
|
|
grep 'Saw argument "--arg4"' fetchcustom.log
|
|
|
|
objectlist=`find .git/lfs/objects -type f`
|
|
[ "$(echo "$objectlist" | wc -l)" -eq 12 ]
|
|
)
|
|
end_test
|
|
|
|
begin_test "custom-transfer-standalone-urlmatch"
|
|
(
|
|
set -e
|
|
|
|
# setup a git repo to be used as a local repo, not remote
|
|
reponame="test-custom-transfer-standalone-urlmatch"
|
|
setup_remote_repo "$reponame"
|
|
|
|
# clone directly, not through lfstest-gitserver
|
|
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
|
|
|
|
# set up custom transfer adapter to use a specific transfer agent, using a URL prefix match
|
|
git config lfs.customtransfer.testcustom.path lfstest-standalonecustomadapter
|
|
git config lfs.customtransfer.testcustom.concurrent false
|
|
git config remote.origin.lfsurl https://git.example.com/example/path/to/repo
|
|
git config lfs.https://git.example.com/example/path/.standalonetransferagent testcustom
|
|
git config lfs.standalonetransferagent invalid-agent
|
|
|
|
# git config lfs.standalonetransferagent testcustom
|
|
export TEST_STANDALONE_BACKUP_PATH="$(pwd)/test-custom-transfer-standalone-urlmatch-backup"
|
|
mkdir -p $TEST_STANDALONE_BACKUP_PATH
|
|
rm -rf $TEST_STANDALONE_BACKUP_PATH/*
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
|
grep "Tracking \"\*.dat\"" track.log
|
|
git add .gitattributes
|
|
git commit -m "Tracking"
|
|
|
|
# set up a decent amount of data so that there's work for multiple concurrent adapters
|
|
echo "[
|
|
{
|
|
\"CommitDate\":\"$(get_date -10d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"},
|
|
{\"Filename\":\"file1.dat\",\"Size\":1024},
|
|
{\"Filename\":\"file2.dat\",\"Size\":750}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -7d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file1.dat\",\"Size\":1050},
|
|
{\"Filename\":\"file3.dat\",\"Size\":660},
|
|
{\"Filename\":\"file4.dat\",\"Size\":230}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -5d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file5.dat\",\"Size\":1200},
|
|
{\"Filename\":\"file6.dat\",\"Size\":300}]
|
|
},
|
|
{
|
|
\"CommitDate\":\"$(get_date -2d)\",
|
|
\"Files\":[
|
|
{\"Filename\":\"file3.dat\",\"Size\":120},
|
|
{\"Filename\":\"file5.dat\",\"Size\":450},
|
|
{\"Filename\":\"file7.dat\",\"Size\":520},
|
|
{\"Filename\":\"file8.dat\",\"Size\":2048}]
|
|
}
|
|
]" | lfstest-testutils addcommits
|
|
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin master 2>&1 | tee pushcustom.log
|
|
# use PIPESTATUS otherwise we get exit code from tee
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
# Make sure the lock verification is not attempted.
|
|
grep "locks/verify$" pushcustom.log && false
|
|
|
|
grep "xfer: started custom adapter process" pushcustom.log
|
|
grep "xfer\[lfstest-standalonecustomadapter\]:" pushcustom.log
|
|
grep "Uploading LFS objects: 100% (12/12)" pushcustom.log
|
|
|
|
rm -rf .git/lfs/objects
|
|
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log
|
|
[ ${PIPESTATUS[0]} = "0" ]
|
|
|
|
grep "xfer: started custom adapter process" fetchcustom.log
|
|
grep "xfer\[lfstest-standalonecustomadapter\]:" fetchcustom.log
|
|
grep "Downloading LFS objects: 100% (12/12)" fetchcustom.log
|
|
|
|
grep "Terminating test custom adapter gracefully" fetchcustom.log
|
|
|
|
objectlist=`find .git/lfs/objects -type f`
|
|
[ "$(echo "$objectlist" | wc -l)" -eq 12 ]
|
|
)
|
|
end_test
|