github.com/stffabi/git-lfs@v2.3.5-0.20180214015214-8eeaa8d88902+incompatible/test/test-happy-path.sh (about) 1 #!/usr/bin/env bash 2 # This is a sample Git LFS test. See test/README.md and testhelpers.sh for 3 # more documentation. 4 5 . "test/testlib.sh" 6 7 begin_test "happy path" 8 ( 9 set -e 10 11 # This initializes a new bare git repository in test/remote. 12 # These remote repositories are global to every test, so keep the names 13 # unique. 14 reponame="$(basename "$0" ".sh")" 15 setup_remote_repo "$reponame" 16 17 # Clone the repository from the test Git server. This is empty, and will be 18 # used to test a "git pull" below. The repo is cloned to $TRASHDIR/clone 19 clone_repo "$reponame" clone 20 21 # Clone the repository again to $TRASHDIR/repo. This will be used to commit 22 # and push objects. 23 clone_repo "$reponame" repo 24 25 # This executes Git LFS from the local repo that was just cloned. 26 git lfs track "*.dat" 2>&1 | tee track.log 27 grep "Tracking \"\*.dat\"" track.log 28 29 contents="a" 30 contents_oid=$(calc_oid "$contents") 31 32 # Regular Git commands can be used. 33 printf "$contents" > a.dat 34 git add a.dat 35 git add .gitattributes 36 git commit -m "add a.dat" 2>&1 | tee commit.log 37 grep "master (root-commit)" commit.log 38 grep "2 files changed" commit.log 39 grep "create mode 100644 a.dat" commit.log 40 grep "create mode 100644 .gitattributes" commit.log 41 42 [ "a" = "$(cat a.dat)" ] 43 44 # This is a small shell function that runs several git commands together. 45 assert_pointer "master" "a.dat" "$contents_oid" 1 46 47 refute_server_object "$reponame" "$contents_oid" 48 49 # This pushes to the remote repository set up at the top of the test. 50 git push origin master 2>&1 | tee push.log 51 grep "Uploading LFS objects: 100% (1/1), 1 B" push.log 52 grep "master -> master" push.log 53 54 assert_server_object "$reponame" "$contents_oid" 55 56 # change to the clone's working directory 57 cd ../clone 58 59 git pull 60 61 [ "a" = "$(cat a.dat)" ] 62 63 assert_pointer "master" "a.dat" "$contents_oid" 1 64 ) 65 end_test 66 67 begin_test "happy path on non-origin remote" 68 ( 69 set -e 70 71 reponame="happy-without-origin" 72 setup_remote_repo "$reponame" 73 74 clone_repo "$reponame" repo-without-origin 75 git lfs track "*.dat" 76 git add .gitattributes 77 git commit -m "track" 78 git push origin master 79 80 clone_repo "$reponame" clone-without-origin 81 git remote rename origin happy-path 82 83 cd ../repo-without-origin 84 echo "a" > a.dat 85 git add a.dat 86 git commit -m "boom" 87 git push origin master 88 89 cd ../clone-without-origin 90 echo "remotes:" 91 git remote 92 git pull happy-path master 93 ) 94 end_test 95 96 begin_test "happy path on good ref" 97 ( 98 set -e 99 100 reponame="happy-path-master-branch-required" 101 setup_remote_repo "$reponame" 102 clone_repo "$reponame" "$reponame" 103 104 git lfs track "*.dat" 105 echo "a" > a.dat 106 git add .gitattributes a.dat 107 git commit -m "add a.dat" 108 109 git push origin master 110 111 # $ echo "a" | shasum -a 256 112 oid="87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7" 113 assert_local_object "$oid" 2 114 assert_server_object "$reponame" "$oid" "refs/heads/master" 115 116 clone_repo "$reponame" "$reponame-clone" 117 assert_local_object "$oid" 2 118 ) 119 end_test 120 121 begin_test "happy path on tracked ref" 122 ( 123 set -e 124 125 reponame="happy-path-tracked-branch-required" 126 setup_remote_repo "$reponame" 127 clone_repo "$reponame" "$reponame" 128 129 git lfs track "*.dat" 130 echo "a" > a.dat 131 git add .gitattributes a.dat 132 git commit -m "add a.dat" 133 134 git push origin master:tracked 135 136 # $ echo "a" | shasum -a 256 137 oid="87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7" 138 assert_local_object "$oid" 2 139 assert_server_object "$reponame" "$oid" "refs/heads/tracked" 140 141 git lfs clone "$GITSERVER/$reponame" --exclude "*" 142 143 git config credential.helper lfstest 144 git config push.default upstream 145 git config branch.master.merge refs/heads/tracked 146 147 git checkout 148 assert_local_object "$oid" 2 149 ) 150 end_test 151 152 begin_test "clears local temp objects" 153 ( 154 set -e 155 156 mkdir repo-temp-objects 157 cd repo-temp-objects 158 git init 159 160 # abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz01 161 mkdir -p .git/lfs/objects/go/od 162 mkdir -p .git/lfs/tmp/objects 163 164 touch .git/lfs/objects/go/od/goodabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwx 165 touch .git/lfs/tmp/objects/goodabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwx-rand123 166 touch .git/lfs/tmp/objects/goodabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwx-rand456 167 touch .git/lfs/tmp/objects/badabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxy-rand123 168 touch .git/lfs/tmp/objects/badabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxy-rand456 169 170 GIT_TRACE=5 git lfs env 171 172 # object file exists 173 [ -e ".git/lfs/objects/go/od/goodabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwx" ] 174 175 # newer tmp files exist 176 [ -e ".git/lfs/tmp/objects/badabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxy-rand123" ] 177 [ -e ".git/lfs/tmp/objects/badabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxy-rand456" ] 178 179 # existing tmp files were cleaned up 180 [ ! -e ".git/lfs/tmp/objects/goodabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwx-rand123" ] 181 [ ! -e ".git/lfs/tmp/objects/goodabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwx-rand456" ] 182 ) 183 end_test