git-lfs/t/t-post-checkout.sh
brian m. carlson 9e006ac4e2
Rename default branch in tests to "main"
Currently, our default branch in tests is "master".  This is the Git
default, but the Git default will likely change in the future, so it
makes sense to update our testsuite to be explicit about the branch
name.  We'll ensure this continues by building against older versions of
Git as well as newer versions.

We use "main" for the new branch name, since that's the proposed value
upstream.

This commit was made entirely by automated means using the following
command:

  git grep -l master t | xargs sed -i -e 's/master/main/g'
2020-07-08 15:38:17 +00:00

208 lines
6.1 KiB
Bash
Executable File

#!/usr/bin/env bash
. "$(dirname "$0")/testlib.sh"
begin_test "post-checkout"
(
set -e
reponame="$(basename "$0" ".sh")"
setup_remote_repo "$reponame"
clone_repo "$reponame" "$reponame"
git lfs track --lockable "*.dat"
git lfs track "*.big" # not lockable
git add .gitattributes
git commit -m "add git attributes"
echo "[
{
\"CommitDate\":\"$(get_date -10d)\",
\"Files\":[
{\"Filename\":\"file1.dat\",\"Data\":\"file 1 creation\"},
{\"Filename\":\"file2.dat\",\"Data\":\"file 2 creation\"}]
},
{
\"CommitDate\":\"$(get_date -7d)\",
\"Files\":[
{\"Filename\":\"file1.dat\",\"Data\":\"file 1 updated commit 2\"},
{\"Filename\":\"file3.big\",\"Data\":\"file 3 creation\"},
{\"Filename\":\"file4.big\",\"Data\":\"file 4 creation\"}],
\"Tags\":[\"atag\"]
},
{
\"CommitDate\":\"$(get_date -5d)\",
\"Files\":[
{\"Filename\":\"file2.dat\",\"Data\":\"file 2 updated commit 3\"}]
},
{
\"CommitDate\":\"$(get_date -3d)\",
\"NewBranch\":\"branch2\",
\"Files\":[
{\"Filename\":\"file5.dat\",\"Data\":\"file 5 creation in branch2\"},
{\"Filename\":\"file6.big\",\"Data\":\"file 6 creation in branch2\"}]
},
{
\"CommitDate\":\"$(get_date -1d)\",
\"Files\":[
{\"Filename\":\"file2.dat\",\"Data\":\"file 2 updated in branch2\"},
{\"Filename\":\"file3.big\",\"Data\":\"file 3 updated in branch2\"}]
}
]" | GIT_LFS_SET_LOCKABLE_READONLY=0 lfstest-testutils addcommits
# skipped setting read-only above to make bulk load simpler (no read-only issues)
git push -u origin main branch2
# re-clone the repo so we start fresh
cd ..
rm -rf "$reponame"
clone_repo "$reponame" "$reponame"
# this will be main
[ "$(cat file1.dat)" == "file 1 updated commit 2" ]
[ "$(cat file2.dat)" == "file 2 updated commit 3" ]
[ "$(cat file3.big)" == "file 3 creation" ]
[ "$(cat file4.big)" == "file 4 creation" ]
[ ! -e file5.dat ]
[ ! -e file6.big ]
# without the post-checkout hook, any changed files would now be writeable
refute_file_writeable file1.dat
refute_file_writeable file2.dat
assert_file_writeable file3.big
assert_file_writeable file4.big
# checkout branch
git checkout branch2
[ -e file5.dat ]
[ -e file6.big ]
refute_file_writeable file1.dat
refute_file_writeable file2.dat
refute_file_writeable file5.dat
assert_file_writeable file3.big
assert_file_writeable file4.big
assert_file_writeable file6.big
# Confirm that contents of existing files were updated even though were read-only
[ "$(cat file2.dat)" == "file 2 updated in branch2" ]
[ "$(cat file3.big)" == "file 3 updated in branch2" ]
# restore files inside a branch (causes full scan since no diff)
rm -f *.dat
[ ! -e file1.dat ]
[ ! -e file2.dat ]
[ ! -e file5.dat ]
git checkout file1.dat file2.dat file5.dat
[ "$(cat file1.dat)" == "file 1 updated commit 2" ]
[ "$(cat file2.dat)" == "file 2 updated in branch2" ]
[ "$(cat file5.dat)" == "file 5 creation in branch2" ]
refute_file_writeable file1.dat
refute_file_writeable file2.dat
refute_file_writeable file5.dat
# now lock files, then remove & restore
git lfs lock file1.dat
git lfs lock file2.dat
assert_file_writeable file1.dat
assert_file_writeable file2.dat
rm -f *.dat
git checkout file1.dat file2.dat file5.dat
assert_file_writeable file1.dat
assert_file_writeable file2.dat
refute_file_writeable file5.dat
)
end_test
begin_test "post-checkout with subdirectories"
(
set -e
reponame="post-checkout-subdirectories"
setup_remote_repo "$reponame"
clone_repo "$reponame" "$reponame"
git lfs track --lockable "bin/*.dat"
git lfs track "*.big" # not lockable
git add .gitattributes
git commit -m "add git attributes"
echo "[
{
\"CommitDate\":\"$(get_date -10d)\",
\"Files\":[
{\"Filename\":\"bin/file1.dat\",\"Data\":\"file 1 creation\"},
{\"Filename\":\"bin/file2.dat\",\"Data\":\"file 2 creation\"}]
},
{
\"CommitDate\":\"$(get_date -7d)\",
\"Files\":[
{\"Filename\":\"bin/file1.dat\",\"Data\":\"file 1 updated commit 2\"},
{\"Filename\":\"file3.big\",\"Data\":\"file 3 creation\"},
{\"Filename\":\"file4.big\",\"Data\":\"file 4 creation\"}],
\"Tags\":[\"atag\"]
},
{
\"CommitDate\":\"$(get_date -5d)\",
\"Files\":[
{\"Filename\":\"bin/file2.dat\",\"Data\":\"file 2 updated commit 3\"}]
},
{
\"CommitDate\":\"$(get_date -3d)\",
\"NewBranch\":\"branch2\",
\"Files\":[
{\"Filename\":\"bin/file5.dat\",\"Data\":\"file 5 creation in branch2\"},
{\"Filename\":\"file6.big\",\"Data\":\"file 6 creation in branch2\"}]
},
{
\"CommitDate\":\"$(get_date -1d)\",
\"Files\":[
{\"Filename\":\"bin/file2.dat\",\"Data\":\"file 2 updated in branch2\"},
{\"Filename\":\"file3.big\",\"Data\":\"file 3 updated in branch2\"}]
}
]" | GIT_LFS_SET_LOCKABLE_READONLY=0 lfstest-testutils addcommits
# skipped setting read-only above to make bulk load simpler (no read-only issues)
git push -u origin main branch2
# re-clone the repo so we start fresh
cd ..
rm -rf "$reponame"
clone_repo "$reponame" "$reponame"
# this will be main
[ "$(cat bin/file1.dat)" == "file 1 updated commit 2" ]
[ "$(cat bin/file2.dat)" == "file 2 updated commit 3" ]
[ "$(cat file3.big)" == "file 3 creation" ]
[ "$(cat file4.big)" == "file 4 creation" ]
[ ! -e bin/file5.dat ]
[ ! -e file6.big ]
# without the post-checkout hook, any changed files would now be writeable
refute_file_writeable bin/file1.dat
refute_file_writeable bin/file2.dat
assert_file_writeable file3.big
assert_file_writeable file4.big
# checkout branch
git checkout branch2
[ -e bin/file5.dat ]
[ -e file6.big ]
refute_file_writeable bin/file1.dat
refute_file_writeable bin/file2.dat
refute_file_writeable bin/file5.dat
assert_file_writeable file3.big
assert_file_writeable file4.big
assert_file_writeable file6.big
# Confirm that contents of existing files were updated even though were read-only
[ "$(cat bin/file2.dat)" == "file 2 updated in branch2" ]
[ "$(cat file3.big)" == "file 3 updated in branch2" ]
)
end_test