1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
|
#!/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
|