github.com/saracen/git-lfs@v2.5.2+incompatible/t/t-fetch-recent.sh (about) 1 #!/usr/bin/env bash 2 3 . "$(dirname "$0")/testlib.sh" 4 5 reponame="fetch-recent" 6 7 # generate content we'll use 8 content0="filecontent0" 9 content1="filecontent1" 10 content2="filecontent2" 11 content3="filecontent3" 12 content4="filecontent4" 13 content5="filecontent5" 14 oid0=$(calc_oid "$content0") 15 oid1=$(calc_oid "$content1") 16 oid2=$(calc_oid "$content2") 17 oid3=$(calc_oid "$content3") 18 oid4=$(calc_oid "$content4") 19 oid5=$(calc_oid "$content5") 20 21 begin_test "init fetch-recent" 22 ( 23 set -e 24 25 setup_remote_repo "$reponame" 26 clone_repo "$reponame" "$reponame" 27 28 git lfs track "*.dat" 2>&1 | tee track.log 29 grep "Tracking \"\*.dat\"" track.log 30 31 echo "[ 32 { 33 \"CommitDate\":\"$(get_date -18d)\", 34 \"Files\":[ 35 {\"Filename\":\"file1.dat\",\"Size\":${#content0}, \"Data\":\"$content0\"}, 36 {\"Filename\":\"file3.dat\",\"Size\":${#content5}, \"Data\":\"$content5\"}] 37 }, 38 { 39 \"CommitDate\":\"$(get_date -14d)\", 40 \"Files\":[ 41 {\"Filename\":\"file1.dat\",\"Size\":${#content1}, \"Data\":\"$content1\"}] 42 }, 43 { 44 \"CommitDate\":\"$(get_date -5d)\", 45 \"NewBranch\":\"other_branch\", 46 \"Files\":[ 47 {\"Filename\":\"file1.dat\",\"Size\":${#content4}, \"Data\":\"$content4\"}] 48 }, 49 { 50 \"CommitDate\":\"$(get_date -1d)\", 51 \"ParentBranches\":[\"master\"], 52 \"Files\":[ 53 {\"Filename\":\"file1.dat\",\"Size\":${#content2}, \"Data\":\"$content2\"}, 54 {\"Filename\":\"file2.dat\",\"Size\":${#content3}, \"Data\":\"$content3\"}] 55 } 56 ]" | lfstest-testutils addcommits 57 58 git push origin master 59 git push origin other_branch 60 assert_server_object "$reponame" "$oid0" 61 assert_server_object "$reponame" "$oid1" 62 assert_server_object "$reponame" "$oid2" 63 assert_server_object "$reponame" "$oid3" 64 assert_server_object "$reponame" "$oid4" 65 66 # This clone is used for subsequent tests 67 clone_repo "$reponame" clone 68 git checkout other_branch 69 git checkout master 70 ) 71 end_test 72 73 begin_test "fetch-recent normal" 74 ( 75 set -e 76 77 cd clone 78 rm -rf .git/lfs/objects 79 80 git config lfs.fetchrecentalways false 81 git config lfs.fetchrecentrefsdays 0 82 git config lfs.fetchrecentremoterefs false 83 git config lfs.fetchrecentcommitsdays 7 84 85 # fetch normally, should just get the last state for file1/2 86 git lfs fetch origin master 87 assert_local_object "$oid2" "${#content2}" 88 assert_local_object "$oid3" "${#content3}" 89 assert_local_object "$oid5" "${#content5}" 90 refute_local_object "$oid0" 91 refute_local_object "$oid1" 92 refute_local_object "$oid4" 93 ) 94 end_test 95 96 begin_test "fetch-recent commits" 97 ( 98 set -e 99 100 cd clone 101 rm -rf .git/lfs/objects 102 103 # now fetch recent - just commits for now 104 git config lfs.fetchrecentrefsdays 0 105 git config lfs.fetchrecentremoterefs false 106 git config lfs.fetchrecentcommitsdays 7 107 108 git lfs fetch --recent origin 109 # that should have fetched master plus previous state needed within 7 days 110 # current state 111 assert_local_object "$oid2" "${#content2}" 112 assert_local_object "$oid3" "${#content3}" 113 # previous state is the 'before' state of any commits made in last 7 days 114 # ie you can check out anything in last 7 days (may have non-LFS commits in between) 115 assert_local_object "$oid1" "${#content1}" 116 refute_local_object "$oid0" 117 refute_local_object "$oid4" 118 ) 119 end_test 120 121 begin_test "fetch-recent days" 122 ( 123 set -e 124 125 cd clone 126 rm -rf .git/lfs/objects 127 128 # now fetch other_branch as well 129 git config lfs.fetchrecentrefsdays 6 130 git config lfs.fetchrecentremoterefs false 131 git config lfs.fetchrecentcommitsdays 7 132 133 git lfs fetch --recent origin 134 # that should have fetched master plus previous state needed within 7 days 135 # current state PLUS refs within 6 days (& their commits within 7) 136 assert_local_object "$oid2" "${#content2}" 137 assert_local_object "$oid3" "${#content3}" 138 assert_local_object "$oid1" "${#content1}" 139 assert_local_object "$oid4" "${#content4}" 140 # still omits oid0 since that's at best 13 days prior to other_branch tip 141 refute_local_object "$oid0" 142 ) 143 end_test 144 145 begin_test "fetch-recent older commits" 146 ( 147 set -e 148 149 cd clone 150 # now test that a 14 day limit picks oid0 up from other_branch 151 # because other_branch was itself 5 days ago, 5+14=19 day search limit 152 git config lfs.fetchrecentcommitsdays 14 153 154 rm -rf .git/lfs/objects 155 git lfs fetch --recent origin 156 assert_local_object "$oid0" "${#content0}" 157 ) 158 end_test 159 160 begin_test "fetch-recent remote branch" 161 ( 162 set -e 163 164 cd "$reponame" 165 # push branch & test remote branch recent 166 git push origin other_branch 167 168 cd ../clone 169 git branch -D other_branch 170 rm -rf .git/lfs/objects 171 git config lfs.fetchrecentcommitsdays 0 172 git config lfs.fetchrecentremoterefs false 173 git config lfs.fetchrecentrefsdays 6 174 175 git lfs fetch --recent origin 176 # should miss #4 until we include remote branches (#1 will always be missing commitdays=0) 177 assert_local_object "$oid2" "${#content2}" 178 assert_local_object "$oid3" "${#content3}" 179 refute_local_object "$oid1" 180 refute_local_object "$oid0" 181 refute_local_object "$oid4" 182 ) 183 end_test 184 185 begin_test "fetch-recent remote refs" 186 ( 187 set -e 188 189 cd clone 190 rm -rf .git/lfs/objects 191 192 # pick up just snapshot at remote ref, ie #4 193 git config lfs.fetchrecentremoterefs true 194 git lfs fetch --recent origin 195 assert_local_object "$oid4" "${#content4}" 196 refute_local_object "$oid0" 197 refute_local_object "$oid1" 198 ) 199 end_test