github.com/saracen/git-lfs@v2.5.2+incompatible/t/t-smudge.sh (about) 1 #!/usr/bin/env bash 2 3 . "$(dirname "$0")/testlib.sh" 4 5 begin_test "smudge" 6 ( 7 set -e 8 9 reponame="$(basename "$0" ".sh")" 10 setup_remote_repo "$reponame" 11 clone_repo "$reponame" repo 12 13 git lfs track "*.dat" 14 echo "smudge a" > a.dat 15 git add .gitattributes a.dat 16 git commit -m "add a.dat" 17 18 # smudge works even though it hasn't been pushed, by reading from .git/lfs/objects 19 output="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9 | git lfs smudge)" 20 [ "smudge a" = "$output" ] 21 22 git push origin master 23 24 # download it from the git lfs server 25 rm -rf .git/lfs/objects 26 output="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9 | git lfs smudge)" 27 [ "smudge a" = "$output" ] 28 ) 29 end_test 30 31 begin_test "smudge with temp file" 32 ( 33 set -e 34 35 cd repo 36 37 rm -rf .git/lfs/objects 38 mkdir -p .git/lfs/tmp/objects 39 touch .git/lfs/tmp/objects/fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254-1 40 pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9 | GIT_TRACE=5 git lfs smudge | tee smudge.log 41 [ "smudge a" = "$(cat smudge.log)" ] || { 42 rm -rf .git/lfs/tmp 43 git lfs logs last 44 exit 1 45 } 46 ) 47 end_test 48 49 begin_test "smudge with invalid pointer" 50 ( 51 set -e 52 53 cd repo 54 [ "wat" = "$(echo "wat" | git lfs smudge)" ] 55 [ "not a git-lfs file" = "$(echo "not a git-lfs file" | git lfs smudge)" ] 56 [ "version " = "$(echo "version " | git lfs smudge)" ] 57 ) 58 end_test 59 60 begin_test "smudge include/exclude" 61 ( 62 set -e 63 64 reponame="$(basename "$0" ".sh")-includeexclude" 65 setup_remote_repo "$reponame" 66 clone_repo "$reponame" includeexclude 67 68 git lfs track "*.dat" 69 echo "smudge a" > a.dat 70 git add .gitattributes a.dat 71 git commit -m "add a.dat" 72 73 pointer="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9)" 74 75 # smudge works even though it hasn't been pushed, by reading from .git/lfs/objects 76 [ "smudge a" = "$(echo "$pointer" | git lfs smudge)" ] 77 78 git push origin master 79 80 # this WOULD download except we're going to prevent it with include/exclude 81 rm -rf .git/lfs/objects 82 git config "lfs.fetchexclude" "a*" 83 84 [ "$pointer" = "$(echo "$pointer" | git lfs smudge a.dat)" ] 85 ) 86 end_test 87 88 begin_test "smudge with skip" 89 ( 90 set -e 91 92 reponame="$(basename "$0" ".sh")-skip" 93 setup_remote_repo "$reponame" 94 clone_repo "$reponame" "skip" 95 96 git lfs track "*.dat" 97 echo "smudge a" > a.dat 98 git add .gitattributes a.dat 99 git commit -m "add a.dat" 100 101 pointer="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9)" 102 [ "smudge a" = "$(echo "$pointer" | git lfs smudge)" ] 103 104 git push origin master 105 106 # Must clear the cache because smudge will use 107 # cached objects even with --skip/GIT_LFS_SKIP_SMUDGE 108 # (--skip applies to whether or not it downloads). 109 rm -rf .git/lfs/objects 110 111 [ "$pointer" = "$(echo "$pointer" | GIT_LFS_SKIP_SMUDGE=1 git lfs smudge)" ] 112 113 echo "test clone with env" 114 export GIT_LFS_SKIP_SMUDGE=1 115 env | grep LFS_SKIP 116 clone_repo "$reponame" "skip-clone-env" 117 [ "$pointer" = "$(cat a.dat)" ] 118 119 git lfs pull 120 [ "smudge a" = "$(cat a.dat)" ] 121 122 echo "test clone without env" 123 unset GIT_LFS_SKIP_SMUDGE 124 [ "$(env | grep LFS_SKIP)" == "" ] 125 clone_repo "$reponame" "no-skip" 126 [ "smudge a" = "$(cat a.dat)" ] 127 128 echo "test clone with init --skip-smudge" 129 git lfs install --skip-smudge 130 clone_repo "$reponame" "skip-clone-init" 131 [ "$pointer" = "$(cat a.dat)" ] 132 133 git lfs install --force 134 ) 135 end_test 136 137 begin_test "smudge clone with include/exclude" 138 ( 139 set -e 140 141 reponame="smudge_include_exclude" 142 setup_remote_repo "$reponame" 143 144 clone_repo "$reponame" "repo_$reponame" 145 146 git lfs track "*.dat" 2>&1 | tee track.log 147 grep "Tracking \"\*.dat\"" track.log 148 149 contents="a" 150 contents_oid=$(calc_oid "$contents") 151 152 printf "$contents" > a.dat 153 git add a.dat 154 git add .gitattributes 155 git commit -m "add a.dat" 2>&1 | tee commit.log 156 grep "master (root-commit)" commit.log 157 grep "2 files changed" commit.log 158 grep "create mode 100644 a.dat" commit.log 159 grep "create mode 100644 .gitattributes" commit.log 160 161 [ "a" = "$(cat a.dat)" ] 162 163 assert_local_object "$contents_oid" 1 164 165 git push origin master 2>&1 | tee push.log 166 grep "Uploading LFS objects: 100% (1/1), 1 B" push.log 167 grep "master -> master" push.log 168 169 assert_server_object "$reponame" "$contents_oid" 170 171 clone="$TRASHDIR/clone_$reponame" 172 git -c lfs.fetchexclude="a*" clone "$GITSERVER/$reponame" "$clone" 173 cd "$clone" 174 175 # Should have succeeded but not downloaded 176 refute_local_object "$contents_oid" 177 178 ) 179 end_test 180 181 begin_test "smudge skip download failure" 182 ( 183 set -e 184 185 reponame="$(basename "$0" ".sh")-skipdownloadfail" 186 setup_remote_repo "$reponame" 187 clone_repo "$reponame" skipdownloadfail 188 189 git lfs track "*.dat" 190 echo "smudge a" > a.dat 191 git add .gitattributes a.dat 192 git commit -m "add a.dat" 193 194 pointer="$(pointer fcf5015df7a9089a7aa7fe74139d4b8f7d62e52d5a34f9a87aeffc8e8c668254 9)" 195 196 # smudge works even though it hasn't been pushed, by reading from .git/lfs/objects 197 [ "smudge a" = "$(echo "$pointer" | git lfs smudge)" ] 198 199 git push origin master 200 201 # make it try to download but we're going to make it fail 202 rm -rf .git/lfs/objects 203 git remote set-url origin httpnope://nope.com/nope 204 205 # this should fail 206 set +e 207 echo "$pointer" | git lfs smudge a.dat; test ${PIPESTATUS[1]} -ne 0 208 set -e 209 210 git config lfs.skipdownloaderrors true 211 echo "$pointer" | git lfs smudge a.dat 212 213 # check content too 214 [ "$pointer" = "$(echo "$pointer" | git lfs smudge a.dat)" ] 215 216 # now try env var 217 git config --unset lfs.skipdownloaderrors 218 219 echo "$pointer" | GIT_LFS_SKIP_DOWNLOAD_ERRORS=1 git lfs smudge a.dat 220 221 ) 222 end_test