github.com/x-oss-byte/git-lfs@v2.5.2+incompatible/t/t-push-failures-local.sh (about)

     1  #!/usr/bin/env bash
     2  
     3  . "$(dirname "$0")/testlib.sh"
     4  
     5  begin_test "push with missing objects (lfs.allowincompletepush true)"
     6  (
     7    set -e
     8  
     9    reponame="push-with-missing-objects"
    10    setup_remote_repo "$reponame"
    11    clone_repo "$reponame" "$reponame"
    12  
    13    git lfs track "*.dat"
    14    git add .gitattributes
    15    git commit -m "initial commit"
    16  
    17    present="present"
    18    present_oid="$(calc_oid "$present")"
    19    printf "$present" > present.dat
    20  
    21    missing="missing"
    22    missing_oid="$(calc_oid "$missing")"
    23    printf "$missing" > missing.dat
    24  
    25    git add missing.dat present.dat
    26    git commit -m "add objects"
    27  
    28    git rm missing.dat
    29    git commit -m "remove missing"
    30  
    31    # :fire: the "missing" object
    32    missing_oid_part_1="$(echo "$missing_oid" | cut -b 1-2)"
    33    missing_oid_part_2="$(echo "$missing_oid" | cut -b 3-4)"
    34    missing_oid_path=".git/lfs/objects/$missing_oid_part_1/$missing_oid_part_2/$missing_oid"
    35    rm "$missing_oid_path"
    36  
    37    git config lfs.allowincompletepush true
    38  
    39    git push origin master 2>&1 | tee push.log
    40    if [ "0" -ne "${PIPESTATUS[0]}" ]; then
    41      echo >&2 "fatal: expected \`git push origin master\` to succeed ..."
    42      exit 1
    43    fi
    44  
    45    grep "LFS upload missing objects" push.log
    46    grep "  (missing) missing.dat ($missing_oid)" push.log
    47  
    48    assert_server_object "$reponame" "$present_oid"
    49    refute_server_object "$reponame" "$missing_oid"
    50  )
    51  end_test
    52  
    53  begin_test "push reject missing objects (lfs.allowincompletepush false)"
    54  (
    55    set -e
    56  
    57    reponame="push-reject-missing-objects"
    58    setup_remote_repo "$reponame"
    59    clone_repo "$reponame" "$reponame"
    60  
    61    git lfs track "*.dat"
    62    git add .gitattributes
    63    git commit -m "initial commit"
    64  
    65    present="present"
    66    present_oid="$(calc_oid "$present")"
    67    printf "$present" > present.dat
    68  
    69    missing="missing"
    70    missing_oid="$(calc_oid "$missing")"
    71    printf "$missing" > missing.dat
    72  
    73    git add missing.dat present.dat
    74    git commit -m "add objects"
    75  
    76    git rm missing.dat
    77    git commit -m "remove missing"
    78  
    79    # :fire: the "missing" object
    80    missing_oid_part_1="$(echo "$missing_oid" | cut -b 1-2)"
    81    missing_oid_part_2="$(echo "$missing_oid" | cut -b 3-4)"
    82    missing_oid_path=".git/lfs/objects/$missing_oid_part_1/$missing_oid_part_2/$missing_oid"
    83    rm "$missing_oid_path"
    84  
    85    git config lfs.allowincompletepush false
    86  
    87    git push origin master 2>&1 | tee push.log
    88    if [ "1" -ne "${PIPESTATUS[0]}" ]; then
    89      echo >&2 "fatal: expected \`git push origin master\` to succeed ..."
    90      exit 1
    91    fi
    92  
    93    grep "no such file or directory" push.log || # unix
    94      grep "cannot find the file" push.log       # windows
    95    grep "failed to push some refs" push.log
    96  
    97    refute_server_object "$reponame" "$present_oid"
    98    refute_server_object "$reponame" "$missing_oid"
    99  )
   100  end_test
   101  
   102  begin_test "push reject missing objects (lfs.allowincompletepush default)"
   103  (
   104    set -e
   105  
   106    reponame="push-missing-objects"
   107    setup_remote_repo "$reponame"
   108    clone_repo "$reponame" "$reponame"
   109  
   110    git lfs track "*.dat"
   111    git add .gitattributes
   112    git commit -m "initial commit"
   113  
   114    missing="missing"
   115    missing_oid="$(calc_oid "$missing")"
   116    missing_len="$(printf "$missing" | wc -c | awk '{ print $1 }')"
   117    printf "$missing" > missing.dat
   118    git add missing.dat
   119    git commit -m "add missing.dat"
   120  
   121    present="present"
   122    present_oid="$(calc_oid "$present")"
   123    present_len="$(printf "$present" | wc -c | awk '{ print $1 }')"
   124    printf "$present" > present.dat
   125    git add present.dat
   126    git commit -m "add present.dat"
   127  
   128    assert_local_object "$missing_oid" "$missing_len"
   129    assert_local_object "$present_oid" "$present_len"
   130  
   131    delete_local_object "$missing_oid"
   132  
   133    refute_local_object "$missing_oid"
   134    assert_local_object "$present_oid" "$present_len"
   135  
   136    git push origin master 2>&1 | tee push.log
   137  
   138    if [ "0" -eq "${PIPESTATUS[0]}" ]; then
   139      echo >&2 "fatal: expected 'git push origin master' to exit with non-zero code"
   140      exit 1
   141    fi
   142  
   143    grep "LFS upload failed:" push.log
   144    grep "  (missing) missing.dat ($missing_oid)" push.log
   145  
   146    refute_server_object "$reponame" "$missing_oid"
   147    assert_server_object "$reponame" "$present_oid"
   148  )
   149  end_test
   150  
   151  begin_test "push reject corrupt objects (lfs.allowincompletepush default)"
   152  (
   153    set -e
   154  
   155    reponame="push-corrupt-objects"
   156    setup_remote_repo "$reponame"
   157    clone_repo "$reponame" "$reponame"
   158  
   159    git lfs track "*.dat"
   160    git add .gitattributes
   161    git commit -m "initial commit"
   162  
   163    corrupt="corrupt"
   164    corrupt_oid="$(calc_oid "$corrupt")"
   165    corrupt_len="$(printf "$corrupt" | wc -c | awk '{ print $1 }')"
   166    printf "$corrupt" > corrupt.dat
   167    git add corrupt.dat
   168    git commit -m "add corrupt.dat"
   169  
   170    present="present"
   171    present_oid="$(calc_oid "$present")"
   172    present_len="$(printf "$present" | wc -c | awk '{ print $1 }')"
   173    printf "$present" > present.dat
   174    git add present.dat
   175    git commit -m "add present.dat"
   176  
   177    assert_local_object "$corrupt_oid" "$corrupt_len"
   178    assert_local_object "$present_oid" "$present_len"
   179  
   180    corrupt_local_object "$corrupt_oid"
   181  
   182    refute_local_object "$corrupt_oid" "$corrupt_len"
   183    assert_local_object "$present_oid" "$present_len"
   184  
   185    git push origin master 2>&1 | tee push.log
   186  
   187    if [ "0" -eq "${PIPESTATUS[0]}" ]; then
   188      echo >&2 "fatal: expected 'git push origin master' to exit with non-zero code"
   189      exit 1
   190    fi
   191  
   192    grep "LFS upload failed:" push.log
   193    grep "  (corrupt) corrupt.dat ($corrupt_oid)" push.log
   194  
   195    refute_server_object "$reponame" "$corrupt_oid"
   196    assert_server_object "$reponame" "$present_oid"
   197  )
   198  end_test