github.com/2lambda123/git-lfs@v2.5.2+incompatible/t/t-untrack.sh (about) 1 #!/usr/bin/env bash 2 3 . "$(dirname "$0")/testlib.sh" 4 5 begin_test "untrack" 6 ( 7 set -e 8 9 # no need to setup a remote repo, since this test doesn't need to push or pull 10 11 reponame="untrack" 12 git init $reponame 13 cd $reponame 14 15 # track *.jpg once 16 git lfs track "*.jpg" | grep "Tracking \"\*.jpg\"" 17 echo "* annex.backend=SHA512E" >> .gitattributes 18 19 git lfs untrack "*.jpg" 20 21 expected="* annex.backend=SHA512E" 22 [ "$expected" = "$(cat .gitattributes)" ] 23 ) 24 end_test 25 26 begin_test "untrack outside git repo" 27 ( 28 set -e 29 30 reponame="outside" 31 mkdir $reponame 32 cd $reponame 33 34 git lfs untrack "*.foo" || { 35 # this fails if it's run outside of a git repo using GIT_LFS_TEST_DIR 36 37 # git itself returns an exit status of 128 38 # $ git show 39 # fatal: Not a git repository (or any of the parent directories): .git 40 # $ echo "$?" 41 # 128 42 43 [ "$?" = "128" ] 44 exit 0 45 } 46 47 if [ -n "$GIT_LFS_TEST_DIR" ]; then 48 echo "GIT_LFS_TEST_DIR should be set outside of any Git repository" 49 exit 1 50 fi 51 ) 52 end_test 53 54 begin_test "untrack removes escape sequences" 55 ( 56 set -e 57 58 reponame="untrack-remove-escape-sequence" 59 git init "$reponame" 60 cd "$reponame" 61 62 git lfs track " " | grep "Tracking \" \"" 63 assert_attributes_count "[[:space:]]" "filter=lfs" 1 64 65 git lfs untrack " " | grep "Untracking \" \"" 66 assert_attributes_count "[[:space:]]" "filter=lfs" 0 67 68 git lfs track "#" | grep "Tracking \"#\"" 69 assert_attributes_count "\\#" "filter=lfs" 1 70 71 git lfs untrack "#" | grep "Untracking \"#\"" 72 assert_attributes_count "\\#" "filter=lfs" 0 73 ) 74 end_test 75 76 begin_test "untrack removes prefixed patterns (legacy)" 77 ( 78 set -e 79 80 reponame="untrack-removes-prefix-patterns-legacy" 81 git init "$reponame" 82 cd "$reponame" 83 84 echo "./a.dat filter=lfs diff=lfs merge=lfs" > .gitattributes 85 printf "a" > a.dat 86 git add .gitattributes a.dat 87 git commit -m "initial commit" 88 89 git lfs untrack "./a.dat" 90 91 if [ ! -z "$(cat .gitattributes)" ]; then 92 echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes" 93 exit 1 94 fi 95 96 git checkout -- .gitattributes 97 98 git lfs untrack "a.dat" 99 100 if [ ! -z "$(cat .gitattributes)" ]; then 101 echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes" 102 exit 1 103 fi 104 ) 105 end_test 106 107 begin_test "untrack removes prefixed patterns (modern)" 108 ( 109 set -e 110 111 reponame="untrack-removes-prefix-patterns-modern" 112 git init "$reponame" 113 cd "$reponame" 114 115 echo "a.dat filter=lfs diff=lfs merge=lfs" > .gitattributes 116 printf "a" > a.dat 117 git add .gitattributes a.dat 118 git commit -m "initial commit" 119 120 git lfs untrack "./a.dat" 121 122 if [ ! -z "$(cat .gitattributes)" ]; then 123 echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes" 124 exit 1 125 fi 126 127 git checkout -- .gitattributes 128 129 git lfs untrack "a.dat" 130 131 if [ ! -z "$(cat .gitattributes)" ]; then 132 echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes" 133 exit 1 134 fi 135 ) 136 end_test 137 138 begin_test "untrack removes escaped pattern in .gitattributes" 139 ( 140 set -e 141 142 reponame="untrack-escaped" 143 git init "$reponame" 144 cd "$reponame" 145 146 filename="file with spaces.#" 147 148 # emulate multiple instances of the same file in gitattributes 149 echo 'file[[:space:]]with[[:space:]]spaces.\# filter=lfs diff=lfs merge=lfs -text' >> .gitattributes 150 echo 'file[[:space:]]with[[:space:]]spaces.\# filter=lfs diff=lfs merge=lfs -text' >> .gitattributes 151 echo 'file[[:space:]]with[[:space:]]spaces.\# filter=lfs diff=lfs merge=lfs -text' >> .gitattributes 152 153 git lfs untrack "$filename" 154 155 if [ ! -z "$(cat .gitattributes)" ]; then 156 echo >&2 "fatal: expected 'git lfs untrack' to clear .gitattributes even if the file name was escaped" 157 exit 1 158 fi 159 ) 160 end_test