2015-07-30 02:37:31 +00:00
|
|
|
#!/usr/bin/env bash
|
2015-05-26 21:29:58 +00:00
|
|
|
|
|
|
|
. "test/testlib.sh"
|
|
|
|
|
|
|
|
begin_test "smudge"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
reponame="$(basename "$0" ".sh")"
|
|
|
|
setup_remote_repo "$reponame"
|
|
|
|
clone_repo "$reponame" repo
|
|
|
|
|
|
|
|
git lfs track "*.dat"
|
|
|
|
echo "smudge a" > a.dat
|
|
|
|
git add .gitattributes a.dat
|
|
|
|
git commit -m "add a.dat"
|
|
|
|
|
|
|
|
# smudge works even though it hasn't been pushed, by reading from .git/lfs/objects
|
|
|
|
output="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9 | git lfs smudge)"
|
2015-05-26 22:15:52 +00:00
|
|
|
[ "smudge a" = "$output" ]
|
2015-05-26 21:29:58 +00:00
|
|
|
|
|
|
|
git push origin master
|
|
|
|
|
|
|
|
# download it from the git lfs server
|
|
|
|
rm -rf .git/lfs/objects
|
|
|
|
output="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9 | git lfs smudge)"
|
2015-05-26 22:15:52 +00:00
|
|
|
[ "smudge a" = "$output" ]
|
2015-05-26 21:29:58 +00:00
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2015-10-21 20:09:26 +00:00
|
|
|
begin_test "smudge with temp file"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
2015-10-21 20:27:55 +00:00
|
|
|
cd repo
|
2015-10-21 20:09:26 +00:00
|
|
|
|
2015-10-21 20:27:55 +00:00
|
|
|
rm -rf .git/lfs/objects
|
|
|
|
mkdir -p .git/lfs/tmp/objects
|
|
|
|
touch .git/lfs/tmp/objects/fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254-1
|
|
|
|
pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9 | GIT_TRACE=5 git lfs smudge | tee smudge.log
|
|
|
|
[ "smudge a" = "$(cat smudge.log)" ] || {
|
|
|
|
rm -rf .git/lfs/tmp
|
|
|
|
git lfs logs last
|
|
|
|
exit 1
|
|
|
|
}
|
2015-10-21 20:09:26 +00:00
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2015-05-26 21:29:58 +00:00
|
|
|
begin_test "smudge with invalid pointer"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
cd repo
|
2015-05-26 22:15:52 +00:00
|
|
|
[ "wat" = "$(echo "wat" | git lfs smudge)" ]
|
2015-09-25 21:46:24 +00:00
|
|
|
[ "not a git-lfs file" = "$(echo "not a git-lfs file" | git lfs smudge)" ]
|
|
|
|
[ "version " = "$(echo "version " | git lfs smudge)" ]
|
2015-05-26 21:29:58 +00:00
|
|
|
)
|
|
|
|
end_test
|
2015-08-10 15:57:13 +00:00
|
|
|
|
|
|
|
begin_test "smudge include/exclude"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
2015-09-23 17:37:32 +00:00
|
|
|
reponame="$(basename "$0" ".sh")-includeexclude"
|
2015-08-10 15:57:13 +00:00
|
|
|
setup_remote_repo "$reponame"
|
2015-09-23 17:37:32 +00:00
|
|
|
clone_repo "$reponame" includeexclude
|
2015-08-10 15:57:13 +00:00
|
|
|
|
|
|
|
git lfs track "*.dat"
|
|
|
|
echo "smudge a" > a.dat
|
|
|
|
git add .gitattributes a.dat
|
|
|
|
git commit -m "add a.dat"
|
|
|
|
|
2015-09-23 17:37:32 +00:00
|
|
|
pointer="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9)"
|
|
|
|
|
2015-08-10 15:57:13 +00:00
|
|
|
# smudge works even though it hasn't been pushed, by reading from .git/lfs/objects
|
2015-09-23 17:37:32 +00:00
|
|
|
[ "smudge a" = "$(echo "$pointer" | git lfs smudge)" ]
|
2015-08-10 15:57:13 +00:00
|
|
|
|
|
|
|
git push origin master
|
|
|
|
|
|
|
|
# this WOULD download except we're going to prevent it with include/exclude
|
|
|
|
rm -rf .git/lfs/objects
|
|
|
|
git config "lfs.fetchexclude" "a*"
|
|
|
|
|
2015-09-23 17:37:32 +00:00
|
|
|
[ "$pointer" = "$(echo "$pointer" | git lfs smudge a.dat)" ]
|
2015-08-10 15:57:13 +00:00
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2015-09-25 16:43:06 +00:00
|
|
|
begin_test "smudge with skip"
|
2015-09-23 17:37:32 +00:00
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
2015-09-25 16:43:06 +00:00
|
|
|
reponame="$(basename "$0" ".sh")-skip"
|
2015-09-23 17:37:32 +00:00
|
|
|
setup_remote_repo "$reponame"
|
2015-09-25 16:43:06 +00:00
|
|
|
clone_repo "$reponame" "skip"
|
2015-09-23 17:37:32 +00:00
|
|
|
|
|
|
|
git lfs track "*.dat"
|
|
|
|
echo "smudge a" > a.dat
|
|
|
|
git add .gitattributes a.dat
|
|
|
|
git commit -m "add a.dat"
|
|
|
|
|
|
|
|
pointer="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9)"
|
|
|
|
[ "smudge a" = "$(echo "$pointer" | git lfs smudge)" ]
|
|
|
|
|
|
|
|
git push origin master
|
|
|
|
|
2015-11-12 04:56:33 +00:00
|
|
|
# Must clear the cache because smudge will use
|
|
|
|
# cached objects even with --skip/GIT_LFS_SKIP_SMUDGE
|
|
|
|
# (--skip applies to whether or not it downloads).
|
|
|
|
rm -rf .git/lfs/objects
|
|
|
|
|
|
|
|
[ "$pointer" = "$(echo "$pointer" | GIT_LFS_SKIP_SMUDGE=1 git lfs smudge)" ]
|
|
|
|
|
2015-09-23 18:20:30 +00:00
|
|
|
echo "test clone with env"
|
2015-09-23 19:43:04 +00:00
|
|
|
export GIT_LFS_SKIP_SMUDGE=1
|
2015-10-01 22:10:56 +00:00
|
|
|
env | grep LFS_SKIP
|
2015-09-25 16:43:06 +00:00
|
|
|
clone_repo "$reponame" "skip-clone-env"
|
2015-09-23 17:37:32 +00:00
|
|
|
[ "$pointer" = "$(cat a.dat)" ]
|
2015-09-23 19:30:10 +00:00
|
|
|
[ "0" = "$(grep -c "Downloading a.dat" clone.log)" ]
|
2015-09-23 17:37:32 +00:00
|
|
|
|
|
|
|
git lfs pull
|
2015-09-23 18:20:30 +00:00
|
|
|
[ "smudge a" = "$(cat a.dat)" ]
|
|
|
|
|
|
|
|
echo "test clone without env"
|
2015-09-23 19:43:04 +00:00
|
|
|
unset GIT_LFS_SKIP_SMUDGE
|
2015-10-01 22:10:56 +00:00
|
|
|
[ "$(env | grep LFS_SKIP)" == "" ]
|
2015-09-25 16:43:06 +00:00
|
|
|
clone_repo "$reponame" "no-skip"
|
2015-09-23 17:37:32 +00:00
|
|
|
[ "smudge a" = "$(cat a.dat)" ]
|
2015-09-23 19:30:10 +00:00
|
|
|
[ "1" = "$(grep -c "Downloading a.dat" clone.log)" ]
|
2015-09-23 18:20:30 +00:00
|
|
|
|
2015-09-25 16:43:06 +00:00
|
|
|
echo "test clone with init --skip-smudge"
|
2015-11-18 18:27:00 +00:00
|
|
|
git lfs install --skip-smudge
|
2015-09-25 16:43:06 +00:00
|
|
|
clone_repo "$reponame" "skip-clone-init"
|
2015-09-23 18:20:30 +00:00
|
|
|
[ "$pointer" = "$(cat a.dat)" ]
|
2015-09-23 19:30:10 +00:00
|
|
|
[ "0" = "$(grep -c "Downloading a.dat" clone.log)" ]
|
2015-09-23 18:20:30 +00:00
|
|
|
|
2015-11-18 18:27:00 +00:00
|
|
|
git lfs install --force
|
2015-09-23 17:37:32 +00:00
|
|
|
)
|
|
|
|
end_test
|
2015-10-22 10:27:56 +00:00
|
|
|
|
|
|
|
begin_test "smudge clone with include/exclude"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
reponame="smudge_include_exclude"
|
|
|
|
setup_remote_repo "$reponame"
|
|
|
|
|
|
|
|
clone_repo "$reponame" "repo_$reponame"
|
|
|
|
|
|
|
|
git lfs track "*.dat" 2>&1 | tee track.log
|
2017-03-24 16:59:03 +00:00
|
|
|
grep "Tracking \"\*.dat\"" track.log
|
2015-10-22 10:27:56 +00:00
|
|
|
|
|
|
|
contents="a"
|
|
|
|
contents_oid=$(calc_oid "$contents")
|
|
|
|
|
|
|
|
printf "$contents" > a.dat
|
|
|
|
git add a.dat
|
|
|
|
git add .gitattributes
|
|
|
|
git commit -m "add a.dat" 2>&1 | tee commit.log
|
|
|
|
grep "master (root-commit)" commit.log
|
|
|
|
grep "2 files changed" commit.log
|
|
|
|
grep "create mode 100644 a.dat" commit.log
|
|
|
|
grep "create mode 100644 .gitattributes" commit.log
|
|
|
|
|
|
|
|
[ "a" = "$(cat a.dat)" ]
|
|
|
|
|
|
|
|
assert_local_object "$contents_oid" 1
|
|
|
|
|
|
|
|
git push origin master 2>&1 | tee push.log
|
|
|
|
grep "(1 of 1 files)" push.log
|
|
|
|
grep "master -> master" push.log
|
|
|
|
|
|
|
|
assert_server_object "$reponame" "$contents_oid"
|
|
|
|
|
|
|
|
clone="$TRASHDIR/clone_$reponame"
|
|
|
|
git -c lfs.fetchexclude="a*" clone "$GITSERVER/$reponame" "$clone"
|
|
|
|
cd "$clone"
|
|
|
|
|
|
|
|
# Should have succeeded but not downloaded
|
|
|
|
refute_local_object "$contents_oid"
|
|
|
|
|
|
|
|
)
|
|
|
|
end_test
|
2016-05-10 12:03:20 +00:00
|
|
|
|
|
|
|
begin_test "smudge skip download failure"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
reponame="$(basename "$0" ".sh")-skipdownloadfail"
|
|
|
|
setup_remote_repo "$reponame"
|
|
|
|
clone_repo "$reponame" skipdownloadfail
|
|
|
|
|
|
|
|
git lfs track "*.dat"
|
|
|
|
echo "smudge a" > a.dat
|
|
|
|
git add .gitattributes a.dat
|
|
|
|
git commit -m "add a.dat"
|
|
|
|
|
|
|
|
pointer="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9)"
|
|
|
|
|
|
|
|
# smudge works even though it hasn't been pushed, by reading from .git/lfs/objects
|
|
|
|
[ "smudge a" = "$(echo "$pointer" | git lfs smudge)" ]
|
|
|
|
|
|
|
|
git push origin master
|
|
|
|
|
|
|
|
# make it try to download but we're going to make it fail
|
|
|
|
rm -rf .git/lfs/objects
|
|
|
|
git remote set-url origin httpnope://nope.com/nope
|
|
|
|
|
|
|
|
# this should fail
|
|
|
|
set +e
|
2016-11-18 14:44:20 +00:00
|
|
|
echo "$pointer" | git lfs smudge a.dat; test ${PIPESTATUS[1]} -ne 0
|
2016-05-10 12:03:20 +00:00
|
|
|
set -e
|
|
|
|
|
|
|
|
git config lfs.skipdownloaderrors true
|
|
|
|
echo "$pointer" | git lfs smudge a.dat
|
|
|
|
|
|
|
|
# check content too
|
|
|
|
[ "$pointer" = "$(echo "$pointer" | git lfs smudge a.dat)" ]
|
|
|
|
|
|
|
|
# now try env var
|
|
|
|
git config --unset lfs.skipdownloaderrors
|
|
|
|
|
|
|
|
echo "$pointer" | GIT_LFS_SKIP_DOWNLOAD_ERRORS=1 git lfs smudge a.dat
|
|
|
|
|
|
|
|
)
|
|
|
|
end_test
|