github.com/saracen/git-lfs@v2.5.2+incompatible/t/t-lock.sh (about) 1 #!/usr/bin/env bash 2 3 . "$(dirname "$0")/testlib.sh" 4 5 begin_test "lock with good ref" 6 ( 7 set -e 8 9 reponame="lock-master-branch-required" 10 setup_remote_repo_with_file "$reponame" "a.dat" 11 clone_repo "$reponame" "$reponame" 12 13 git lfs lock "a.dat" --json 2>&1 | tee lock.json 14 if [ "0" -ne "${PIPESTATUS[0]}" ]; then 15 echo >&2 "fatal: expected \'git lfs lock \'a.dat\'\' to succeed" 16 exit 1 17 fi 18 19 id=$(assert_lock lock.json a.dat) 20 assert_server_lock "$reponame" "$id" "refs/heads/master" 21 ) 22 end_test 23 24 begin_test "lock with good tracked ref" 25 ( 26 set -e 27 28 reponame="lock-tracked-branch-required" 29 setup_remote_repo "$reponame" 30 clone_repo "$reponame" "$reponame" 31 32 git lfs track "*.dat" 33 echo "a" > a.dat 34 git add .gitattributes a.dat 35 git commit -m "add a.dat" 36 37 git config push.default upstream 38 git config branch.master.merge refs/heads/tracked 39 git push origin master 40 41 git lfs lock "a.dat" --json 2>&1 | tee lock.json 42 if [ "0" -ne "${PIPESTATUS[0]}" ]; then 43 echo >&2 "fatal: expected \'git lfs lock \'a.dat\'\' to succeed" 44 exit 1 45 fi 46 47 id=$(assert_lock lock.json a.dat) 48 assert_server_lock "$reponame" "$id" "refs/heads/tracked" 49 ) 50 end_test 51 52 begin_test "lock with bad ref" 53 ( 54 set -e 55 56 reponame="lock-other-branch-required" 57 setup_remote_repo "$reponame" 58 clone_repo "$reponame" "$reponame" 59 60 git lfs track "*.dat" 61 echo "a" > a.dat 62 git add .gitattributes a.dat 63 git commit -m "add a.dat" 64 git push origin master:other 65 66 GIT_CURL_VERBOSE=1 git lfs lock "a.dat" 2>&1 | tee lock.json 67 if [ "0" -eq "${PIPESTATUS[0]}" ]; then 68 echo >&2 "fatal: expected \'git lfs lock \'a.dat\'\' to fail" 69 exit 1 70 fi 71 72 grep 'Lock failed: Expected ref "refs/heads/other", got "refs/heads/master"' lock.json 73 ) 74 end_test 75 76 begin_test "create lock with server using client cert" 77 ( 78 set -e 79 reponame="lock_create_client_cert" 80 setup_remote_repo_with_file "$reponame" "cc.dat" 81 82 git config lfs.url "$CLIENTCERTGITSERVER/$reponame.git/info/lfs" 83 git lfs lock --json "cc.dat" | tee lock.json 84 id=$(assert_lock lock.json cc.dat) 85 assert_server_lock "$reponame" "$id" 86 ) 87 end_test 88 89 begin_test "creating a lock (with output)" 90 ( 91 set -e 92 93 reponame="lock_create_simple_output" 94 setup_remote_repo_with_file "$reponame" "a_output.dat" 95 96 git lfs lock "a_output.dat" | tee lock.log 97 grep "Locked a_output.dat" lock.log 98 id=$(grep -oh "\((.*)\)" lock.log | tr -d \(\)) 99 assert_server_lock "$reponame" "$id" 100 ) 101 end_test 102 103 begin_test "locking a previously locked file" 104 ( 105 set -e 106 107 reponame="lock_create_previously_created" 108 setup_remote_repo_with_file "$reponame" "b.dat" 109 110 git lfs lock --json "b.dat" | tee lock.json 111 id=$(assert_lock lock.json b.dat) 112 assert_server_lock "$reponame" "$id" 113 114 grep "lock already created" <(git lfs lock "b.dat" 2>&1) 115 ) 116 end_test 117 118 begin_test "locking a directory" 119 ( 120 set -e 121 122 reponame="locking_directories" 123 setup_remote_repo "remote_$reponame" 124 clone_repo "remote_$reponame" "clone_$reponame" 125 126 git lfs track "*.dat" 127 mkdir dir 128 echo "a" > dir/a.dat 129 130 git add dir/a.dat .gitattributes 131 132 git commit -m "add dir/a.dat" | tee commit.log 133 grep "master (root-commit)" commit.log 134 grep "2 files changed" commit.log 135 grep "create mode 100644 dir/a.dat" commit.log 136 grep "create mode 100644 .gitattributes" commit.log 137 138 git push origin master 2>&1 | tee push.log 139 grep "master -> master" push.log 140 141 git lfs lock ./dir/ 2>&1 | tee lock.log 142 grep "cannot lock directory" lock.log 143 ) 144 end_test 145 146 begin_test "locking a nested file" 147 ( 148 set -e 149 150 reponame="locking-nested-file" 151 setup_remote_repo "$reponame" 152 clone_repo "$reponame" "$reponame" 153 154 git lfs track "*.dat" --lockable 155 git add .gitattributes 156 git commit -m "initial commit" 157 158 mkdir -p foo/bar/baz 159 160 contents="contents" 161 contents_oid="$(calc_oid "$contents")" 162 163 printf "$contents" > foo/bar/baz/a.dat 164 git add foo/bar/baz/a.dat 165 git commit -m "add a.dat" 166 167 git push origin master 168 169 assert_server_object "$reponame" "$contents_oid" 170 171 git lfs lock foo/bar/baz/a.dat 2>&1 | tee lock.log 172 grep "Locked foo/bar/baz/a.dat" lock.log 173 174 git lfs locks 2>&1 | tee locks.log 175 grep "foo/bar/baz/a.dat" locks.log 176 ) 177 end_test 178 179 begin_test "creating a lock (within subdirectory)" 180 ( 181 set -e 182 183 reponame="lock_create_within_subdirectory" 184 setup_remote_repo_with_file "$reponame" "sub/a.dat" 185 186 cd sub 187 188 git lfs lock --json "a.dat" | tee lock.json 189 if [ "0" -ne "${PIPESTATUS[0]}" ]; then 190 echo >&2 "fatal: expected \'git lfs lock \'a.dat\'\' to succeed" 191 exit 1 192 fi 193 194 id=$(assert_lock lock.json sub/a.dat) 195 assert_server_lock "$reponame" "$id" 196 ) 197 end_test 198 199 begin_test "creating a lock (symlinked working directory)" 200 ( 201 set -eo pipefail 202 203 if [[ $(uname) == *"MINGW"* ]]; then 204 echo >&2 "info: skipped on Windows ..." 205 exit 0 206 fi 207 208 reponame="lock-in-symlinked-working-directory" 209 setup_remote_repo "$reponame" 210 clone_repo "$reponame" "$reponame" 211 212 git lfs track -l "*.dat" 213 mkdir -p folder1 folder2 214 printf "hello" > folder2/a.dat 215 add_symlink "../folder2" "folder1/folder2" 216 217 git add --all . 218 git commit -m "initial commit" 219 git push origin master 220 221 pushd "$TRASHDIR" > /dev/null 222 ln -s "$reponame" "$reponame-symlink" 223 cd "$reponame-symlink" 224 225 git lfs lock --json folder1/folder2/a.dat 2>&1 | tee lock.json 226 227 id="$(assert_lock lock.json folder1/folder2/a.dat)" 228 assert_server_lock "$reponame" "$id" master 229 popd > /dev/null 230 ) 231 end_test