github.com/catandhorse/git-lfs@v2.5.2+incompatible/t/t-custom-transfers.sh (about) 1 #!/usr/bin/env bash 2 3 . "$(dirname "$0")/testlib.sh" 4 5 begin_test "custom-transfer-wrong-path" 6 ( 7 set -e 8 9 # this repo name is the indicator to the server to support custom transfer 10 reponame="test-custom-transfer-fail" 11 setup_remote_repo "$reponame" 12 13 clone_repo "$reponame" $reponame 14 15 # deliberately incorrect path 16 git config lfs.customtransfer.testcustom.path path-to-nothing 17 18 git lfs track "*.dat" 2>&1 | tee track.log 19 grep "Tracking \"\*.dat\"" track.log 20 21 contents="jksgdfljkgsdlkjafg lsjdgf alkjgsd lkfjag sldjkgf alkjsgdflkjagsd kljfg asdjgf kalsd" 22 contents_oid=$(calc_oid "$contents") 23 24 printf "$contents" > a.dat 25 git add a.dat 26 git add .gitattributes 27 git commit -m "add a.dat" 2>&1 | tee commit.log 28 GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin master 2>&1 | tee pushcustom.log 29 # use PIPESTATUS otherwise we get exit code from tee 30 res=${PIPESTATUS[0]} 31 grep "xfer: adapter \"testcustom\" Begin()" pushcustom.log 32 grep "Failed to start custom transfer command" pushcustom.log 33 if [ "$res" = "0" ]; then 34 echo "Push should have failed because of an incorrect custom transfer path." 35 exit 1 36 fi 37 38 ) 39 end_test 40 41 begin_test "custom-transfer-upload-download" 42 ( 43 set -e 44 45 # this repo name is the indicator to the server to support custom transfer 46 reponame="test-custom-transfer-1" 47 setup_remote_repo "$reponame" 48 49 clone_repo "$reponame" $reponame 50 51 # set up custom transfer adapter 52 git config lfs.customtransfer.testcustom.path lfstest-customadapter 53 54 git lfs track "*.dat" 2>&1 | tee track.log 55 grep "Tracking \"\*.dat\"" track.log 56 git add .gitattributes 57 git commit -m "Tracking" 58 59 # set up a decent amount of data so that there's work for multiple concurrent adapters 60 echo "[ 61 { 62 \"CommitDate\":\"$(get_date -10d)\", 63 \"Files\":[ 64 {\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"}, 65 {\"Filename\":\"file1.dat\",\"Size\":1024}, 66 {\"Filename\":\"file2.dat\",\"Size\":750}] 67 }, 68 { 69 \"CommitDate\":\"$(get_date -7d)\", 70 \"Files\":[ 71 {\"Filename\":\"file1.dat\",\"Size\":1050}, 72 {\"Filename\":\"file3.dat\",\"Size\":660}, 73 {\"Filename\":\"file4.dat\",\"Size\":230}] 74 }, 75 { 76 \"CommitDate\":\"$(get_date -5d)\", 77 \"Files\":[ 78 {\"Filename\":\"file5.dat\",\"Size\":1200}, 79 {\"Filename\":\"file6.dat\",\"Size\":300}] 80 }, 81 { 82 \"CommitDate\":\"$(get_date -2d)\", 83 \"Files\":[ 84 {\"Filename\":\"file3.dat\",\"Size\":120}, 85 {\"Filename\":\"file5.dat\",\"Size\":450}, 86 {\"Filename\":\"file7.dat\",\"Size\":520}, 87 {\"Filename\":\"file8.dat\",\"Size\":2048}] 88 } 89 ]" | lfstest-testutils addcommits 90 91 GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin master 2>&1 | tee pushcustom.log 92 # use PIPESTATUS otherwise we get exit code from tee 93 [ ${PIPESTATUS[0]} = "0" ] 94 95 grep "xfer: started custom adapter process" pushcustom.log 96 grep "xfer\[lfstest-customadapter\]:" pushcustom.log 97 grep "Uploading LFS objects: 100% (12/12)" pushcustom.log 98 99 rm -rf .git/lfs/objects 100 GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log 101 [ ${PIPESTATUS[0]} = "0" ] 102 103 grep "xfer: started custom adapter process" fetchcustom.log 104 grep "xfer\[lfstest-customadapter\]:" fetchcustom.log 105 106 grep "Terminating test custom adapter gracefully" fetchcustom.log 107 108 objectlist=`find .git/lfs/objects -type f` 109 [ "$(echo "$objectlist" | wc -l)" -eq 12 ] 110 ) 111 end_test 112 113 begin_test "custom-transfer-standalone" 114 ( 115 set -e 116 117 # setup a git repo to be used as a local repo, not remote 118 reponame="test-custom-transfer-standalone" 119 setup_remote_repo "$reponame" 120 121 # clone directly, not through lfstest-gitserver 122 clone_repo_url "$REMOTEDIR/$reponame.git" $reponame 123 124 # set up custom transfer adapter to use a specific transfer agent 125 git config lfs.customtransfer.testcustom.path lfstest-standalonecustomadapter 126 git config lfs.customtransfer.testcustom.concurrent false 127 git config lfs.standalonetransferagent testcustom 128 export TEST_STANDALONE_BACKUP_PATH="$(pwd)/test-custom-transfer-standalone-backup" 129 mkdir -p $TEST_STANDALONE_BACKUP_PATH 130 rm -rf $TEST_STANDALONE_BACKUP_PATH/* 131 132 git lfs track "*.dat" 2>&1 | tee track.log 133 grep "Tracking \"\*.dat\"" track.log 134 git add .gitattributes 135 git commit -m "Tracking" 136 137 # set up a decent amount of data so that there's work for multiple concurrent adapters 138 echo "[ 139 { 140 \"CommitDate\":\"$(get_date -10d)\", 141 \"Files\":[ 142 {\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"}, 143 {\"Filename\":\"file1.dat\",\"Size\":1024}, 144 {\"Filename\":\"file2.dat\",\"Size\":750}] 145 }, 146 { 147 \"CommitDate\":\"$(get_date -7d)\", 148 \"Files\":[ 149 {\"Filename\":\"file1.dat\",\"Size\":1050}, 150 {\"Filename\":\"file3.dat\",\"Size\":660}, 151 {\"Filename\":\"file4.dat\",\"Size\":230}] 152 }, 153 { 154 \"CommitDate\":\"$(get_date -5d)\", 155 \"Files\":[ 156 {\"Filename\":\"file5.dat\",\"Size\":1200}, 157 {\"Filename\":\"file6.dat\",\"Size\":300}] 158 }, 159 { 160 \"CommitDate\":\"$(get_date -2d)\", 161 \"Files\":[ 162 {\"Filename\":\"file3.dat\",\"Size\":120}, 163 {\"Filename\":\"file5.dat\",\"Size\":450}, 164 {\"Filename\":\"file7.dat\",\"Size\":520}, 165 {\"Filename\":\"file8.dat\",\"Size\":2048}] 166 } 167 ]" | lfstest-testutils addcommits 168 169 GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin master 2>&1 | tee pushcustom.log 170 # use PIPESTATUS otherwise we get exit code from tee 171 [ ${PIPESTATUS[0]} = "0" ] 172 173 # Make sure the lock verification is not attempted. 174 grep "locks/verify$" pushcustom.log && false 175 176 grep "xfer: started custom adapter process" pushcustom.log 177 grep "xfer\[lfstest-standalonecustomadapter\]:" pushcustom.log 178 grep "Uploading LFS objects: 100% (12/12)" pushcustom.log 179 180 rm -rf .git/lfs/objects 181 GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log 182 [ ${PIPESTATUS[0]} = "0" ] 183 184 grep "xfer: started custom adapter process" fetchcustom.log 185 grep "xfer\[lfstest-standalonecustomadapter\]:" fetchcustom.log 186 grep "Downloading LFS objects: 100% (12/12)" fetchcustom.log 187 188 grep "Terminating test custom adapter gracefully" fetchcustom.log 189 190 objectlist=`find .git/lfs/objects -type f` 191 [ "$(echo "$objectlist" | wc -l)" -eq 12 ] 192 ) 193 end_test 194 195 begin_test "custom-transfer-standalone-urlmatch" 196 ( 197 set -e 198 199 # setup a git repo to be used as a local repo, not remote 200 reponame="test-custom-transfer-standalone-urlmatch" 201 setup_remote_repo "$reponame" 202 203 # clone directly, not through lfstest-gitserver 204 clone_repo_url "$REMOTEDIR/$reponame.git" $reponame 205 206 # set up custom transfer adapter to use a specific transfer agent, using a URL prefix match 207 git config lfs.customtransfer.testcustom.path lfstest-standalonecustomadapter 208 git config lfs.customtransfer.testcustom.concurrent false 209 git config remote.origin.lfsurl https://git.example.com/example/path/to/repo 210 git config lfs.https://git.example.com/example/path/.standalonetransferagent testcustom 211 git config lfs.standalonetransferagent invalid-agent 212 213 # git config lfs.standalonetransferagent testcustom 214 export TEST_STANDALONE_BACKUP_PATH="$(pwd)/test-custom-transfer-standalone-urlmatch-backup" 215 mkdir -p $TEST_STANDALONE_BACKUP_PATH 216 rm -rf $TEST_STANDALONE_BACKUP_PATH/* 217 218 git lfs track "*.dat" 2>&1 | tee track.log 219 grep "Tracking \"\*.dat\"" track.log 220 git add .gitattributes 221 git commit -m "Tracking" 222 223 # set up a decent amount of data so that there's work for multiple concurrent adapters 224 echo "[ 225 { 226 \"CommitDate\":\"$(get_date -10d)\", 227 \"Files\":[ 228 {\"Filename\":\"verify.dat\",\"Size\":18,\"Data\":\"send-verify-action\"}, 229 {\"Filename\":\"file1.dat\",\"Size\":1024}, 230 {\"Filename\":\"file2.dat\",\"Size\":750}] 231 }, 232 { 233 \"CommitDate\":\"$(get_date -7d)\", 234 \"Files\":[ 235 {\"Filename\":\"file1.dat\",\"Size\":1050}, 236 {\"Filename\":\"file3.dat\",\"Size\":660}, 237 {\"Filename\":\"file4.dat\",\"Size\":230}] 238 }, 239 { 240 \"CommitDate\":\"$(get_date -5d)\", 241 \"Files\":[ 242 {\"Filename\":\"file5.dat\",\"Size\":1200}, 243 {\"Filename\":\"file6.dat\",\"Size\":300}] 244 }, 245 { 246 \"CommitDate\":\"$(get_date -2d)\", 247 \"Files\":[ 248 {\"Filename\":\"file3.dat\",\"Size\":120}, 249 {\"Filename\":\"file5.dat\",\"Size\":450}, 250 {\"Filename\":\"file7.dat\",\"Size\":520}, 251 {\"Filename\":\"file8.dat\",\"Size\":2048}] 252 } 253 ]" | lfstest-testutils addcommits 254 255 GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git push origin master 2>&1 | tee pushcustom.log 256 # use PIPESTATUS otherwise we get exit code from tee 257 [ ${PIPESTATUS[0]} = "0" ] 258 259 # Make sure the lock verification is not attempted. 260 grep "locks/verify$" pushcustom.log && false 261 262 grep "xfer: started custom adapter process" pushcustom.log 263 grep "xfer\[lfstest-standalonecustomadapter\]:" pushcustom.log 264 grep "Uploading LFS objects: 100% (12/12)" pushcustom.log 265 266 rm -rf .git/lfs/objects 267 GIT_TRACE=1 GIT_TRANSFER_TRACE=1 git lfs fetch --all 2>&1 | tee fetchcustom.log 268 [ ${PIPESTATUS[0]} = "0" ] 269 270 grep "xfer: started custom adapter process" fetchcustom.log 271 grep "xfer\[lfstest-standalonecustomadapter\]:" fetchcustom.log 272 grep "Downloading LFS objects: 100% (12/12)" fetchcustom.log 273 274 grep "Terminating test custom adapter gracefully" fetchcustom.log 275 276 objectlist=`find .git/lfs/objects -type f` 277 [ "$(echo "$objectlist" | wc -l)" -eq 12 ] 278 ) 279 end_test