git-lfs/t/t-standalone-file.sh
brian m. carlson 1321b82a77
t: move the urlify function to shared code
We're going to use the urlify function in other places, so let's move it
to some shared code in the generic test helper file.
2021-07-20 19:16:00 +00:00

474 lines
14 KiB
Bash
Executable File

#!/usr/bin/env bash
. "$(dirname "$0")/testlib.sh"
do_upload_download_test () {
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
git add .gitattributes
git commit -m "Tracking"
git checkout -b test
# 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 test 2>&1 | tee pushcustom.log
# use PIPESTATUS otherwise we get exit code from tee
[ ${PIPESTATUS[0]} = "0" ]
ourobjects=$(cd .git && find lfs/objects -type f | sort)
theirobjects=$(cd $gitdir && find lfs/objects -type f | sort)
# Make sure the lock verification is not attempted.
grep "locks/verify$" pushcustom.log && false
grep "xfer: started custom adapter process" pushcustom.log
grep "Uploading LFS objects: 100% (12/12)" pushcustom.log
[ "$ourobjects" = "$theirobjects" ]
rm -rf .git/lfs/objects
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log
[ ${PIPESTATUS[0]} = "0" ]
objectlist=$(find .git/lfs/objects -type f)
[ "$(echo "$objectlist" | wc -l)" -eq 12 ]
}
begin_test "standalone-file-upload-download-bare"
(
set -e
# setup a git repo to be used as a local repo, not remote
reponame="standalone-file-upload-download-bare"
setup_remote_repo "$reponame"
git init --bare "$reponame-2.git"
gitdir="$(pwd)/$reponame-2.git"
# clone directly, not through lfstest-gitserver
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
git remote set-url origin "file://$(urlify "$gitdir")"
do_upload_download_test
)
end_test
begin_test "standalone-file-upload-download-non-bare"
(
set -e
# setup a git repo to be used as a local repo, not remote
reponame="standalone-file-upload-download-non-bare"
setup_remote_repo "$reponame"
git init "$reponame-2.git"
repo2="$(pwd)/$reponame-2.git"
gitdir="$(pwd)/$reponame-2.git/.git"
# clone directly, not through lfstest-gitserver
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
git remote set-url origin "file://$(urlify "$repo2")"
do_upload_download_test
)
end_test
begin_test "standalone-file-download-missing-file"
(
set -e
# setup a git repo to be used as a local repo, not remote
reponame="standalone-file-download-missing-file"
setup_remote_repo "$reponame"
otherrepo="$(pwd)/$reponame-2.git"
git init --bare "$otherrepo"
# clone directly, not through lfstest-gitserver
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
git remote set-url origin "file://$(urlify "$otherrepo")"
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
git add .gitattributes
git commit -m "Tracking"
git checkout -b test
# 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 test 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 "Uploading LFS objects: 100% (12/12)" pushcustom.log
# Delete an object from the remote side. Any object will do.
rm -f $(find "$otherrepo/lfs/objects" -type f | head -n1)
rm -rf .git/lfs/objects
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log
# Make sure we failed.
[ ${PIPESTATUS[0]} != "0" ]
# Make sure we downloaded the rest of the objects.
objectlist=$(find .git/lfs/objects -type f)
[ "$(echo "$objectlist" | wc -l)" -eq 11 ]
)
end_test
begin_test "standalone-file-clone"
(
set -e
# setup a git repo to be used as a local repo, not remote
reponame="standalone-file-clone"
setup_remote_repo "$reponame"
# clone directly, not through lfstest-gitserver
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
git add .gitattributes
git commit -m "Tracking"
git checkout -b test
# 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
testdir="$(pwd)"
cd "$TRASHDIR"
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git clone "file://$(urlify "$testdir")" repo3 2>&1 | tee clonecustom.log
grep "xfer: started custom adapter process" clonecustom.log
)
end_test
begin_test "standalone-file-local-path"
(
set -e
# setup a git repo to be used as a local repo, not remote
reponame="standalone-file-local-path"
setup_remote_repo "$reponame"
# clone directly, not through lfstest-gitserver
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
git add .gitattributes
git commit -m "Tracking"
git checkout -b test
# 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
testdir="$(pwd)"
cd "$TRASHDIR"
# Check a clone using an absolute Unix-style path.
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git clone "$testdir" "$reponame-repo1" 2>&1 | tee clonecustom.log
(cd "$reponame-repo1" && git lfs fsck)
grep "xfer: started custom adapter process" clonecustom.log
# Check a clone using a relative path.
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git clone "$reponame-repo1" "$reponame-repo2" 2>&1 | tee clonecustom.log
(cd "$reponame-repo2" && git lfs fsck)
grep "xfer: started custom adapter process" clonecustom.log
# Check a clone using an absolute native-style path.
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git clone "$(native_path "$testdir")" "$reponame-repo3" 2>&1 | tee clonecustom.log
(cd "$reponame-repo3" && git lfs fsck)
grep "xfer: started custom adapter process" clonecustom.log
)
end_test
begin_test "standalone-file-lfs.url file URL"
(
set -e
# setup a git repo to be used as a local repo, not remote
reponame="standalone-file-lfsurl"
setup_remote_repo "$reponame"
# clone directly, not through lfstest-gitserver
clone_repo_url "$REMOTEDIR/$reponame.git" $reponame
otherrepo="$(pwd)/$reponame-2.git"
git init --bare "$otherrepo"
wrongrepo="$(pwd)/$reponame-3.git"
git init --bare "$wrongrepo"
git remote set-url origin "file://$(urlify "$wrongrepo")"
git config lfs.url "file://$(urlify "$otherrepo")"
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
git add .gitattributes
git commit -m "Tracking"
git checkout -b test
# 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 test 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 "Uploading LFS objects: 100% (12/12)" pushcustom.log
# Make sure we didn't write to the wrong repo.
objectlist=$(find "$wrongrepo/lfs/objects" -type f || true)
[ -z "$objectlist" ]
# Make sure we uploaded the expected number of objects.
objectlist=$(find "$otherrepo/lfs/objects" -type f || true)
[ "$(echo "$objectlist" | wc -l)" -eq 12 ]
)
end_test
begin_test "standalone-file-lfs.url http URL"
(
set -e
reponame="standalone-file-lfsurl-http"
setup_remote_repo "$reponame"
# clone directly, not through lfstest-gitserver
clone_repo "$reponame" "$reponame"
wrongrepo="$(pwd)/$reponame-2.git"
git init --bare "$wrongrepo"
git remote set-url origin "file://$(urlify "$wrongrepo")"
git config lfs.url "$(repo_endpoint "$GITSERVER" "$reponame")"
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
git add .gitattributes
git commit -m "Tracking"
git checkout -b test
# 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 test 2>&1 | tee push.log
# use PIPESTATUS otherwise we get exit code from tee
[ ${PIPESTATUS[0]} = "0" ]
# We should not use the custom adapter process here.
! grep "xfer: started custom adapter process" push.log
grep -F "$GITSERVER/$reponame" push.log
# Make sure we didn't write to the wrong repo.
objectlist=$(find "$wrongrepo/lfs/objects" -type f || true)
[ -z "$objectlist" ]
rm -fr .git/lfs/objects
GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetch.log
! grep "xfer: started custom adapter process" fetch.log
grep -F "$GITSERVER/$reponame" fetch.log
git lfs fsck
)
end_test