git-lfs/t/t-untrack.sh

179 lines
4.0 KiB
Bash
Raw Normal View History

2015-07-30 02:37:31 +00:00
#!/usr/bin/env bash
. "$(dirname "$0")/testlib.sh"
begin_test "untrack"
(
set -e
# no need to setup a remote repo, since this test doesn't need to push or pull
reponame="untrack"
git init $reponame
cd $reponame
# track *.jpg once
git lfs track "*.jpg" | grep "Tracking \"\*.jpg\""
echo "* annex.backend=SHA512E" >> .gitattributes
git lfs untrack "*.jpg"
expected="* annex.backend=SHA512E"
[ "$expected" = "$(cat .gitattributes)" ]
)
end_test
begin_test "untrack outside git repo"
(
set -e
reponame="outside"
mkdir $reponame
cd $reponame
git lfs untrack "*.foo" || {
# this fails if it's run outside of a git repo using GIT_LFS_TEST_DIR
# git itself returns an exit status of 128
# $ git show
# fatal: Not a git repository (or any of the parent directories): .git
# $ echo "$?"
# 128
[ "$?" = "128" ]
exit 0
}
if [ -n "$GIT_LFS_TEST_DIR" ]; then
echo "GIT_LFS_TEST_DIR should be set outside of any Git repository"
exit 1
fi
)
end_test
begin_test "untrack removes escape sequences"
(
set -e
reponame="untrack-remove-escape-sequence"
git init "$reponame"
cd "$reponame"
git lfs track " " | grep "Tracking \" \""
assert_attributes_count "[[:space:]]" "filter=lfs" 1
git lfs untrack " " | grep "Untracking \" \""
assert_attributes_count "[[:space:]]" "filter=lfs" 0
git lfs track "#" | grep "Tracking \"#\""
assert_attributes_count "\\#" "filter=lfs" 1
git lfs untrack "#" | grep "Untracking \"#\""
assert_attributes_count "\\#" "filter=lfs" 0
)
end_test
begin_test "untrack removes prefixed patterns (legacy)"
(
set -e
reponame="untrack-removes-prefix-patterns-legacy"
git init "$reponame"
cd "$reponame"
echo "./a.dat filter=lfs diff=lfs merge=lfs" > .gitattributes
printf "a" > a.dat
git add .gitattributes a.dat
git commit -m "initial commit"
git lfs untrack "./a.dat"
if [ ! -z "$(cat .gitattributes)" ]; then
echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes"
exit 1
fi
git checkout -- .gitattributes
git lfs untrack "a.dat"
if [ ! -z "$(cat .gitattributes)" ]; then
echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes"
exit 1
fi
)
end_test
begin_test "untrack removes prefixed patterns (modern)"
(
set -e
reponame="untrack-removes-prefix-patterns-modern"
git init "$reponame"
cd "$reponame"
echo "a.dat filter=lfs diff=lfs merge=lfs" > .gitattributes
printf "a" > a.dat
git add .gitattributes a.dat
git commit -m "initial commit"
git lfs untrack "./a.dat"
if [ ! -z "$(cat .gitattributes)" ]; then
echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes"
exit 1
fi
git checkout -- .gitattributes
git lfs untrack "a.dat"
if [ ! -z "$(cat .gitattributes)" ]; then
echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes"
exit 1
fi
)
end_test
begin_test "untrack removes escaped pattern in .gitattributes"
(
set -e
reponame="untrack-escaped"
git init "$reponame"
cd "$reponame"
filename="file with spaces.#"
# emulate multiple instances of the same file in gitattributes
echo 'file[[:space:]]with[[:space:]]spaces.\# filter=lfs diff=lfs merge=lfs -text' >> .gitattributes
echo 'file[[:space:]]with[[:space:]]spaces.\# filter=lfs diff=lfs merge=lfs -text' >> .gitattributes
echo 'file[[:space:]]with[[:space:]]spaces.\# filter=lfs diff=lfs merge=lfs -text' >> .gitattributes
git lfs untrack "$filename"
if [ ! -z "$(cat .gitattributes)" ]; then
echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes even if the file name was escaped"
exit 1
fi
)
end_test
begin_test "untrack works with GIT_WORK_TREE"
(
set -e
reponame="untrack-work-tree"
export GIT_WORK_TREE="$reponame" GIT_DIR="$reponame-git"
mkdir "$GIT_WORK_TREE" "$GIT_DIR"
git init
git lfs track '*.bin'
grep -F '*.bin filter=lfs diff=lfs merge=lfs -text' "$reponame/.gitattributes"
git lfs untrack '*.bin'
[ ! -s "$reponame/.gitattributes" ]
)
end_test