git-lfs/t/t-update.sh

241 lines
8.2 KiB
Bash
Raw Normal View History

2015-07-30 02:37:31 +00:00
#!/usr/bin/env bash
2015-05-26 21:49:04 +00:00
. "$(dirname "$0")/testlib.sh"
2015-05-26 21:49:04 +00:00
2015-05-26 22:08:03 +00:00
begin_test "update"
2015-05-26 21:49:04 +00:00
(
set -e
pre_push_hook="#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/pre-push'.\\n\"; exit 2; }
2015-05-26 21:49:04 +00:00
git lfs pre-push \"\$@\""
post_checkout_hook="#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/post-checkout'.\\n\"; exit 2; }
git lfs post-checkout \"\$@\""
post_commit_hook="#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/post-commit'.\\n\"; exit 2; }
git lfs post-commit \"\$@\""
post_merge_hook="#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/post-merge'.\\n\"; exit 2; }
git lfs post-merge \"\$@\""
2015-05-26 21:49:04 +00:00
mkdir without-pre-push
cd without-pre-push
git init
[ "Updated Git hooks." = "$(git lfs update)" ]
[ "$pre_push_hook" = "$(cat .git/hooks/pre-push)" ]
[ "$post_checkout_hook" = "$(cat .git/hooks/post-checkout)" ]
[ "$post_commit_hook" = "$(cat .git/hooks/post-commit)" ]
[ "$post_merge_hook" = "$(cat .git/hooks/post-merge)" ]
2015-05-26 21:49:04 +00:00
# run it again
[ "Updated Git hooks." = "$(git lfs update)" ]
[ "$pre_push_hook" = "$(cat .git/hooks/pre-push)" ]
[ "$post_checkout_hook" = "$(cat .git/hooks/post-checkout)" ]
[ "$post_commit_hook" = "$(cat .git/hooks/post-commit)" ]
[ "$post_merge_hook" = "$(cat .git/hooks/post-merge)" ]
2015-05-26 21:49:04 +00:00
# replace old hook 1
echo "#!/bin/sh
git lfs push --stdin \$*" > .git/hooks/pre-push
[ "Updated Git hooks." = "$(git lfs update)" ]
[ "$pre_push_hook" = "$(cat .git/hooks/pre-push)" ]
2015-05-26 21:49:04 +00:00
# replace old hook 2
echo "#!/bin/sh
git lfs push --stdin \"\$@\"" > .git/hooks/pre-push
[ "Updated Git hooks." = "$(git lfs update)" ]
[ "$pre_push_hook" = "$(cat .git/hooks/pre-push)" ]
2015-05-26 21:49:04 +00:00
2015-05-27 21:40:16 +00:00
# replace old hook 3
echo "#!/bin/sh
git lfs pre-push \"\$@\"" > .git/hooks/pre-push
[ "Updated Git hooks." = "$(git lfs update)" ]
[ "$pre_push_hook" = "$(cat .git/hooks/pre-push)" ]
2016-04-25 13:52:45 +00:00
# replace blank hook
rm .git/hooks/pre-push
touch .git/hooks/pre-push
touch .git/hooks/post-checkout
touch .git/hooks/post-merge
[ "Updated Git hooks." = "$(git lfs update)" ]
2016-04-25 13:52:45 +00:00
[ "$pre_push_hook" = "$(cat .git/hooks/pre-push)" ]
[ "$post_checkout_hook" = "$(cat .git/hooks/post-checkout)" ]
[ "$post_commit_hook" = "$(cat .git/hooks/post-commit)" ]
[ "$post_merge_hook" = "$(cat .git/hooks/post-merge)" ]
2016-04-25 13:52:45 +00:00
# replace old hook 4
echo "#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\\nThis repository has been set up with Git LFS but Git LFS is not installed.\\n\"; exit 0; }
git lfs pre-push \"$@\""
[ "Updated Git hooks." = "$(git lfs update)" ]
[ "$pre_push_hook" = "$(cat .git/hooks/pre-push)" ]
# replace old hook 5
echo "#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\\nThis repository has been set up with Git LFS but Git LFS is not installed.\\n\"; exit 2; }
git lfs pre-push \"$@\""
[ "Updated Git hooks." = "$(git lfs update)" ]
2015-05-27 21:40:16 +00:00
[ "$pre_push_hook" = "$(cat .git/hooks/pre-push)" ]
2015-05-26 21:49:04 +00:00
# don't replace unexpected hook
echo "test" > .git/hooks/pre-push
echo "test" > .git/hooks/post-checkout
echo "test" > .git/hooks/post-commit
echo "test" > .git/hooks/post-merge
2015-05-26 21:49:04 +00:00
expected="Hook already exists: pre-push
test
2015-05-26 21:49:04 +00:00
To resolve this, either:
1: run \`git lfs update --manual\` for instructions on how to merge hooks.
2: run \`git lfs update --force\` to overwrite your hook."
2015-05-26 21:49:04 +00:00
[ "$expected" = "$(git lfs update 2>&1)" ]
[ "test" = "$(cat .git/hooks/pre-push)" ]
[ "test" = "$(cat .git/hooks/post-checkout)" ]
[ "test" = "$(cat .git/hooks/post-commit)" ]
[ "test" = "$(cat .git/hooks/post-merge)" ]
2015-05-26 21:49:04 +00:00
2016-04-25 09:56:38 +00:00
# Make sure returns non-zero
set +e
git lfs update
if [ $? -eq 0 ]
then
exit 1
fi
set -e
# test manual steps
expected="Add the following to '.git/hooks/pre-push':
#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/pre-push'.\n\"; exit 2; }
git lfs pre-push \"\$@\"
Add the following to '.git/hooks/post-checkout':
#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/post-checkout'.\n\"; exit 2; }
git lfs post-checkout \"\$@\"
Add the following to '.git/hooks/post-commit':
#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/post-commit'.\n\"; exit 2; }
git lfs post-commit \"\$@\"
Add the following to '.git/hooks/post-merge':
#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/post-merge'.\n\"; exit 2; }
git lfs post-merge \"\$@\""
[ "$expected" = "$(git lfs update --manual 2>&1)" ]
[ "test" = "$(cat .git/hooks/pre-push)" ]
[ "test" = "$(cat .git/hooks/post-checkout)" ]
[ "test" = "$(cat .git/hooks/post-commit)" ]
[ "test" = "$(cat .git/hooks/post-merge)" ]
2015-05-26 21:49:04 +00:00
# force replace unexpected hook
[ "Updated Git hooks." = "$(git lfs update --force)" ]
[ "$pre_push_hook" = "$(cat .git/hooks/pre-push)" ]
[ "$post_checkout_hook" = "$(cat .git/hooks/post-checkout)" ]
[ "$post_commit_hook" = "$(cat .git/hooks/post-commit)" ]
[ "$post_merge_hook" = "$(cat .git/hooks/post-merge)" ]
has_test_dir || exit 0
2015-09-30 23:38:13 +00:00
echo "test with bare repository"
cd ..
git clone --mirror without-pre-push bare
cd bare
2015-09-17 22:37:25 +00:00
git lfs env
git lfs update
2015-09-17 22:37:25 +00:00
ls -al hooks
[ "$pre_push_hook" = "$(cat hooks/pre-push)" ]
2015-05-26 21:49:04 +00:00
)
end_test
begin_test "update with leading spaces"
(
set -e
reponame="update-leading-spaces"
git init "$reponame"
cd "$reponame"
[ "Updated Git hooks." = "$(git lfs update)" ]
# $pre_push_hook contains leading TAB '\t' characters
pre_push_hook="#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/pre-push'.\\n\"; exit 2; }
git lfs pre-push \"\$@\""
echo -n "$pre_push_hook" > .git/hooks/pre-push
[ "Updated Git hooks." = "$(git lfs update)" ]
)
end_test
begin_test "update lfs.{url}.access"
(
set -e
mkdir update-access
cd update-access
git init
git config lfs.http://example.com.access private
git config lfs.https://example.com.access private
git config lfs.https://example2.com.access basic
git config lfs.https://example3.com.access other
[ "private" = "$(git config lfs.http://example.com.access)" ]
[ "private" = "$(git config lfs.https://example.com.access)" ]
[ "basic" = "$(git config lfs.https://example2.com.access)" ]
[ "other" = "$(git config lfs.https://example3.com.access)" ]
expected="Updated Git hooks.
Updated http://example.com access from private to basic.
Updated https://example.com access from private to basic.
Removed invalid https://example3.com access of other."
)
end_test
begin_test "update: outside git repository"
(
2015-10-19 20:47:18 +00:00
if [ -d "hooks" ]; then
ls -al
echo "hooks dir exists"
exit 1
fi
2015-09-08 16:20:52 +00:00
set +e
git lfs update 2>&1 > check.log
res=$?
set -e
2015-10-19 20:47:18 +00:00
if [ "$res" = "0" ]; then
2015-10-19 20:47:18 +00:00
if [ -z "$GIT_LFS_TEST_DIR" ]; then
echo "Passes because $GIT_LFS_TEST_DIR is unset."
exit 0
fi
fi
2015-10-19 20:47:18 +00:00
2015-09-08 16:20:52 +00:00
[ "$res" = "128" ]
2015-10-19 20:47:18 +00:00
if [ -d "hooks" ]; then
ls -al
echo "hooks dir exists"
exit 1
fi
cat check.log
grep "Not in a Git repository" check.log
)
end_test