github.com/git-lfs/git-lfs@v2.5.2+incompatible/t/t-migrate-import-no-rewrite.sh (about)

     1  #!/usr/bin/env bash
     2  
     3  . "$(dirname "$0")/fixtures/migrate.sh"
     4  . "$(dirname "$0")/testlib.sh"
     5  
     6  begin_test "migrate import --no-rewrite (default branch)"
     7  (
     8    set -e
     9  
    10    setup_local_branch_with_gitattrs
    11  
    12    txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
    13    prev_commit_oid="$(git rev-parse HEAD)"
    14  
    15    git lfs migrate import --no-rewrite --yes *.txt
    16  
    17    # Ensure our desired files were imported into git-lfs
    18    assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120"
    19    assert_local_object "$txt_oid" "120"
    20  
    21    # Ensure the git history remained the same
    22    new_commit_oid="$(git rev-parse HEAD~1)"
    23    if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
    24      exit 1
    25    fi
    26  
    27    # Ensure a new commit was made
    28    new_head_oid="$(git rev-parse HEAD)"
    29    if [ "$prev_commit_oid" == "$new_oid" ]; then
    30      exit 1
    31    fi
    32  
    33    # Ensure a new commit message was generated based on the list of imported files
    34    commit_msg="$(git log -1 --pretty=format:%s)"
    35    echo "$commit_msg" | grep -q "a.txt: convert to Git LFS"
    36  )
    37  end_test
    38  
    39  begin_test "migrate import --no-rewrite (bare repository)"
    40  (
    41    set -e
    42  
    43    setup_single_remote_branch_with_gitattrs
    44  
    45    prev_commit_oid="$(git rev-parse HEAD)"
    46    txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
    47    md_oid="$(calc_oid "$(git cat-file -p :a.md)")"
    48  
    49    git lfs migrate import --no-rewrite --yes a.txt a.md
    50  
    51    # Ensure our desired files were imported
    52    assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "30"
    53    assert_pointer "refs/heads/master" "a.md" "$md_oid" "50"
    54  
    55    # Ensure the git history remained the same
    56    new_commit_oid="$(git rev-parse HEAD~1)"
    57    if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
    58      exit 1
    59    fi
    60  
    61    # Ensure a new commit was made
    62    new_head_oid="$(git rev-parse HEAD)"
    63    if [ "$prev_commit_oid" == "$new_oid" ]; then
    64      exit 1
    65    fi
    66  )
    67  end_test
    68  
    69  begin_test "migrate import --no-rewrite (multiple branches)"
    70  (
    71    set -e
    72  
    73    setup_multiple_local_branches_with_gitattrs
    74  
    75    prev_commit_oid="$(git rev-parse HEAD)"
    76  
    77    md_oid="$(calc_oid "$(git cat-file -p :a.md)")"
    78    txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
    79    md_feature_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")"
    80  
    81    git lfs migrate import --no-rewrite --yes *.txt *.md
    82  
    83    # Ensure our desired files were imported
    84    assert_pointer "refs/heads/master" "a.md" "$md_oid" "140"
    85    assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120"
    86  
    87    assert_local_object "$md_oid" "140"
    88    assert_local_object "$txt_oid" "120"
    89  
    90    # Ensure our other branch was unmodified
    91    refute_local_object "$md_feature_oid" "30"
    92  
    93    # Ensure the git history remained the same
    94    new_commit_oid="$(git rev-parse HEAD~1)"
    95    if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
    96      exit 1
    97    fi
    98  
    99    # Ensure a new commit was made
   100    new_head_oid="$(git rev-parse HEAD)"
   101    if [ "$prev_commit_oid" == "$new_oid" ]; then
   102      exit 1
   103    fi
   104  )
   105  end_test
   106  
   107  begin_test "migrate import --no-rewrite (no .gitattributes)"
   108  (
   109    set -e
   110  
   111    setup_multiple_local_branches
   112  
   113    # Ensure command fails if no .gitattributes files are present
   114    git lfs migrate import --no-rewrite --yes *.txt *.md 2>&1 | tee migrate.log
   115    if [ ${PIPESTATUS[0]} -eq 0 ]; then
   116      echo >&2 "fatal: expected git lfs migrate import --no-rewrite to fail, didn't"
   117      exit 1
   118    fi
   119  
   120    grep "no Git LFS filters found in .gitattributes" migrate.log
   121  )
   122  end_test
   123  
   124  begin_test "migrate import --no-rewrite (nested .gitattributes)"
   125  (
   126    set -e
   127  
   128    setup_local_branch_with_nested_gitattrs
   129  
   130    # Ensure a .md filter does not exist in the top-level .gitattributes
   131    master_attrs="$(git cat-file -p "$master:.gitattributes")"
   132    [ !"$(echo "$master_attrs" | grep -q ".md")" ]
   133  
   134    # Ensure a .md filter exists in the nested .gitattributes
   135    nested_attrs="$(git cat-file -p "$master:b/.gitattributes")"
   136    echo "$nested_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
   137  
   138    md_oid="$(calc_oid "$(git cat-file -p :a.md)")"
   139    nested_md_oid="$(calc_oid "$(git cat-file -p :b/a.md)")"
   140    txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
   141  
   142    git lfs migrate import --no-rewrite --yes a.txt b/a.md
   143  
   144    # Ensure a.txt and subtree/a.md were imported, even though *.md only exists in the
   145    # nested subtree/.gitattributes file
   146    assert_pointer "refs/heads/master" "b/a.md" "$nested_md_oid" "140"
   147    assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120"
   148  
   149    assert_local_object "$nested_md_oid" 140
   150    assert_local_object "$txt_oid" 120
   151    refute_local_object "$md_oid" 140
   152  
   153    # Failure should occur when trying to import a.md as no entry exists in
   154    # top-level .gitattributes file
   155    git lfs migrate import --no-rewrite --yes a.md 2>&1 | tee migrate.log
   156    if [ ${PIPESTATUS[0]} -eq 0 ]; then
   157      echo >&2 "fatal: expected git lfs migrate import --no-rewrite to fail, didn't"
   158      exit 1
   159    fi
   160  
   161    grep "a.md did not match any Git LFS filters in .gitattributes" migrate.log
   162  )
   163  end_test
   164  
   165  begin_test "migrate import --no-rewrite (with commit message)"
   166  (
   167    set -e
   168  
   169    setup_local_branch_with_gitattrs
   170  
   171    prev_commit_oid="$(git rev-parse HEAD)"
   172    expected_commit_msg="run git-lfs migrate import --no-rewrite"
   173  
   174    git lfs migrate import --message "$expected_commit_msg" --no-rewrite --yes *.txt
   175  
   176    # Ensure the git history remained the same
   177    new_commit_oid="$(git rev-parse HEAD~1)"
   178    if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
   179      exit 1
   180    fi
   181  
   182    # Ensure a new commit was made
   183    new_head_oid="$(git rev-parse HEAD)"
   184    if [ "$prev_commit_oid" == "$new_oid" ]; then
   185      exit 1
   186    fi
   187  
   188    # Ensure the provided commit message was used
   189    commit_msg="$(git log -1 --pretty=format:%s)"
   190    if [ "$commit_msg" != "$expected_commit_msg" ]; then
   191      exit 1
   192    fi
   193  )
   194  end_test
   195  
   196  begin_test "migrate import --no-rewrite (with empty commit message)"
   197  (
   198    set -e
   199  
   200    setup_local_branch_with_gitattrs
   201  
   202    prev_commit_oid="$(git rev-parse HEAD)"
   203  
   204    git lfs migrate import -m "" --no-rewrite --yes *.txt
   205  
   206    # Ensure the git history remained the same
   207    new_commit_oid="$(git rev-parse HEAD~1)"
   208    if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
   209      exit 1
   210    fi
   211  
   212    # Ensure a new commit was made
   213    new_head_oid="$(git rev-parse HEAD)"
   214    if [ "$prev_commit_oid" == "$new_oid" ]; then
   215      exit 1
   216    fi
   217  
   218    # Ensure the provided commit message was used
   219    commit_msg="$(git log -1 --pretty=format:%s)"
   220    if [ "$commit_msg" != "" ]; then
   221      exit 1
   222    fi
   223  )
   224  end_test