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