git-lfs/t/t-fetch-recent.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

200 lines
5.2 KiB
Bash
Executable File

#!/usr/bin/env bash
. "$(dirname "$0")/testlib.sh"
reponame="fetch-recent"
# generate content we'll use
content0="filecontent0"
content1="filecontent1"
content2="filecontent2"
content3="filecontent3"
content4="filecontent4"
content5="filecontent5"
oid0=$(calc_oid "$content0")
oid1=$(calc_oid "$content1")
oid2=$(calc_oid "$content2")
oid3=$(calc_oid "$content3")
oid4=$(calc_oid "$content4")
oid5=$(calc_oid "$content5")
begin_test "init fetch-recent"
(
set -e
setup_remote_repo "$reponame"
clone_repo "$reponame" "$reponame"
git lfs track "*.dat" 2>&1 | tee track.log
grep "Tracking \"\*.dat\"" track.log
echo "[
{
\"CommitDate\":\"$(get_date -18d)\",
\"Files\":[
{\"Filename\":\"file1.dat\",\"Size\":${#content0}, \"Data\":\"$content0\"},
{\"Filename\":\"file3.dat\",\"Size\":${#content5}, \"Data\":\"$content5\"}]
},
{
\"CommitDate\":\"$(get_date -14d)\",
\"Files\":[
{\"Filename\":\"file1.dat\",\"Size\":${#content1}, \"Data\":\"$content1\"}]
},
{
\"CommitDate\":\"$(get_date -5d)\",
\"NewBranch\":\"other_branch\",
\"Files\":[
{\"Filename\":\"file1.dat\",\"Size\":${#content4}, \"Data\":\"$content4\"}]
},
{
\"CommitDate\":\"$(get_date -1d)\",
\"ParentBranches\":[\"main\"],
\"Files\":[
{\"Filename\":\"file1.dat\",\"Size\":${#content2}, \"Data\":\"$content2\"},
{\"Filename\":\"file2.dat\",\"Size\":${#content3}, \"Data\":\"$content3\"}]
}
]" | lfstest-testutils addcommits
git push origin main
git push origin other_branch
assert_server_object "$reponame" "$oid0"
assert_server_object "$reponame" "$oid1"
assert_server_object "$reponame" "$oid2"
assert_server_object "$reponame" "$oid3"
assert_server_object "$reponame" "$oid4"
# This clone is used for subsequent tests
clone_repo "$reponame" clone
git checkout other_branch
git checkout main
)
end_test
begin_test "fetch-recent normal"
(
set -e
cd clone
rm -rf .git/lfs/objects
git config lfs.fetchrecentalways false
git config lfs.fetchrecentrefsdays 0
git config lfs.fetchrecentremoterefs false
git config lfs.fetchrecentcommitsdays 7
# fetch normally, should just get the last state for file1/2
git lfs fetch origin main
assert_local_object "$oid2" "${#content2}"
assert_local_object "$oid3" "${#content3}"
assert_local_object "$oid5" "${#content5}"
refute_local_object "$oid0"
refute_local_object "$oid1"
refute_local_object "$oid4"
)
end_test
begin_test "fetch-recent commits"
(
set -e
cd clone
rm -rf .git/lfs/objects
# now fetch recent - just commits for now
git config lfs.fetchrecentrefsdays 0
git config lfs.fetchrecentremoterefs false
git config lfs.fetchrecentcommitsdays 7
git lfs fetch --recent origin
# that should have fetched main plus previous state needed within 7 days
# current state
assert_local_object "$oid2" "${#content2}"
assert_local_object "$oid3" "${#content3}"
# previous state is the 'before' state of any commits made in last 7 days
# ie you can check out anything in last 7 days (may have non-LFS commits in between)
assert_local_object "$oid1" "${#content1}"
refute_local_object "$oid0"
refute_local_object "$oid4"
)
end_test
begin_test "fetch-recent days"
(
set -e
cd clone
rm -rf .git/lfs/objects
# now fetch other_branch as well
git config lfs.fetchrecentrefsdays 6
git config lfs.fetchrecentremoterefs false
git config lfs.fetchrecentcommitsdays 7
git lfs fetch --recent origin
# that should have fetched main plus previous state needed within 7 days
# current state PLUS refs within 6 days (& their commits within 7)
assert_local_object "$oid2" "${#content2}"
assert_local_object "$oid3" "${#content3}"
assert_local_object "$oid1" "${#content1}"
assert_local_object "$oid4" "${#content4}"
# still omits oid0 since that's at best 13 days prior to other_branch tip
refute_local_object "$oid0"
)
end_test
begin_test "fetch-recent older commits"
(
set -e
cd clone
# now test that a 14 day limit picks oid0 up from other_branch
# because other_branch was itself 5 days ago, 5+14=19 day search limit
git config lfs.fetchrecentcommitsdays 14
rm -rf .git/lfs/objects
git lfs fetch --recent origin
assert_local_object "$oid0" "${#content0}"
)
end_test
begin_test "fetch-recent remote branch"
(
set -e
cd "$reponame"
# push branch & test remote branch recent
git push origin other_branch
cd ../clone
git branch -D other_branch
rm -rf .git/lfs/objects
git config lfs.fetchrecentcommitsdays 0
git config lfs.fetchrecentremoterefs false
git config lfs.fetchrecentrefsdays 6
git lfs fetch --recent origin
# should miss #4 until we include remote branches (#1 will always be missing commitdays=0)
assert_local_object "$oid2" "${#content2}"
assert_local_object "$oid3" "${#content3}"
refute_local_object "$oid1"
refute_local_object "$oid0"
refute_local_object "$oid4"
)
end_test
begin_test "fetch-recent remote refs"
(
set -e
cd clone
rm -rf .git/lfs/objects
# pick up just snapshot at remote ref, ie #4
git config lfs.fetchrecentremoterefs true
git lfs fetch --recent origin
assert_local_object "$oid4" "${#content4}"
refute_local_object "$oid0"
refute_local_object "$oid1"
)
end_test