9e006ac4e2
Currently, our default branch in tests is "master". This is the Git default, but the Git default will likely change in the future, so it makes sense to update our testsuite to be explicit about the branch name. We'll ensure this continues by building against older versions of Git as well as newer versions. We use "main" for the new branch name, since that's the proposed value upstream. This commit was made entirely by automated means using the following command: git grep -l master t | xargs sed -i -e 's/master/main/g'
228 lines
6.1 KiB
Bash
Executable File
228 lines
6.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
. "$(dirname "$0")/fixtures/migrate.sh"
|
|
. "$(dirname "$0")/testlib.sh"
|
|
|
|
begin_test "migrate import --no-rewrite (default branch)"
|
|
(
|
|
set -e
|
|
|
|
setup_local_branch_with_gitattrs
|
|
|
|
txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
|
|
prev_commit_oid="$(git rev-parse HEAD)"
|
|
|
|
git lfs migrate import --no-rewrite --yes *.txt
|
|
|
|
# Ensure our desired files were imported into git-lfs
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_oid" "120"
|
|
assert_local_object "$txt_oid" "120"
|
|
|
|
# Ensure the git history remained the same
|
|
new_commit_oid="$(git rev-parse HEAD~1)"
|
|
if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure a new commit was made
|
|
new_head_oid="$(git rev-parse HEAD)"
|
|
if [ "$prev_commit_oid" == "$new_oid" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure a new commit message was generated based on the list of imported files
|
|
commit_msg="$(git log -1 --pretty=format:%s)"
|
|
echo "$commit_msg" | grep -q "a.txt: convert to Git LFS"
|
|
|
|
# Ensure we write a valid commit object.
|
|
git fsck
|
|
)
|
|
end_test
|
|
|
|
begin_test "migrate import --no-rewrite (bare repository)"
|
|
(
|
|
set -e
|
|
|
|
setup_single_remote_branch_with_gitattrs
|
|
|
|
prev_commit_oid="$(git rev-parse HEAD)"
|
|
txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
|
|
md_oid="$(calc_oid "$(git cat-file -p :a.md)")"
|
|
|
|
git lfs migrate import --no-rewrite --yes a.txt a.md
|
|
|
|
# Ensure our desired files were imported
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_oid" "30"
|
|
assert_pointer "refs/heads/main" "a.md" "$md_oid" "50"
|
|
|
|
# Ensure the git history remained the same
|
|
new_commit_oid="$(git rev-parse HEAD~1)"
|
|
if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure a new commit was made
|
|
new_head_oid="$(git rev-parse HEAD)"
|
|
if [ "$prev_commit_oid" == "$new_oid" ]; then
|
|
exit 1
|
|
fi
|
|
)
|
|
end_test
|
|
|
|
begin_test "migrate import --no-rewrite (multiple branches)"
|
|
(
|
|
set -e
|
|
|
|
setup_multiple_local_branches_with_gitattrs
|
|
|
|
prev_commit_oid="$(git rev-parse HEAD)"
|
|
|
|
md_oid="$(calc_oid "$(git cat-file -p :a.md)")"
|
|
txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
|
|
md_feature_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")"
|
|
|
|
git lfs migrate import --no-rewrite --yes *.txt *.md
|
|
|
|
# Ensure our desired files were imported
|
|
assert_pointer "refs/heads/main" "a.md" "$md_oid" "140"
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_oid" "120"
|
|
|
|
assert_local_object "$md_oid" "140"
|
|
assert_local_object "$txt_oid" "120"
|
|
|
|
# Ensure our other branch was unmodified
|
|
refute_local_object "$md_feature_oid" "30"
|
|
|
|
# Ensure the git history remained the same
|
|
new_commit_oid="$(git rev-parse HEAD~1)"
|
|
if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure a new commit was made
|
|
new_head_oid="$(git rev-parse HEAD)"
|
|
if [ "$prev_commit_oid" == "$new_oid" ]; then
|
|
exit 1
|
|
fi
|
|
)
|
|
end_test
|
|
|
|
begin_test "migrate import --no-rewrite (no .gitattributes)"
|
|
(
|
|
set -e
|
|
|
|
setup_multiple_local_branches
|
|
|
|
# Ensure command fails if no .gitattributes files are present
|
|
git lfs migrate import --no-rewrite --yes *.txt *.md 2>&1 | tee migrate.log
|
|
if [ ${PIPESTATUS[0]} -eq 0 ]; then
|
|
echo >&2 "fatal: expected git lfs migrate import --no-rewrite to fail, didn't"
|
|
exit 1
|
|
fi
|
|
|
|
grep "no Git LFS filters found in .gitattributes" migrate.log
|
|
)
|
|
end_test
|
|
|
|
begin_test "migrate import --no-rewrite (nested .gitattributes)"
|
|
(
|
|
set -e
|
|
|
|
setup_local_branch_with_nested_gitattrs
|
|
|
|
# Ensure a .md filter does not exist in the top-level .gitattributes
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
|
[ !"$(echo "$main_attrs" | grep -q ".md")" ]
|
|
|
|
# Ensure a .md filter exists in the nested .gitattributes
|
|
nested_attrs="$(git cat-file -p "$main:b/.gitattributes")"
|
|
echo "$nested_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
md_oid="$(calc_oid "$(git cat-file -p :a.md)")"
|
|
nested_md_oid="$(calc_oid "$(git cat-file -p :b/a.md)")"
|
|
txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
|
|
|
|
git lfs migrate import --no-rewrite --yes a.txt b/a.md
|
|
|
|
# Ensure a.txt and subtree/a.md were imported, even though *.md only exists in the
|
|
# nested subtree/.gitattributes file
|
|
assert_pointer "refs/heads/main" "b/a.md" "$nested_md_oid" "140"
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_oid" "120"
|
|
|
|
assert_local_object "$nested_md_oid" 140
|
|
assert_local_object "$txt_oid" 120
|
|
refute_local_object "$md_oid" 140
|
|
|
|
# Failure should occur when trying to import a.md as no entry exists in
|
|
# top-level .gitattributes file
|
|
git lfs migrate import --no-rewrite --yes a.md 2>&1 | tee migrate.log
|
|
if [ ${PIPESTATUS[0]} -eq 0 ]; then
|
|
echo >&2 "fatal: expected git lfs migrate import --no-rewrite to fail, didn't"
|
|
exit 1
|
|
fi
|
|
|
|
grep "a.md did not match any Git LFS filters in .gitattributes" migrate.log
|
|
)
|
|
end_test
|
|
|
|
begin_test "migrate import --no-rewrite (with commit message)"
|
|
(
|
|
set -e
|
|
|
|
setup_local_branch_with_gitattrs
|
|
|
|
prev_commit_oid="$(git rev-parse HEAD)"
|
|
expected_commit_msg="run git-lfs migrate import --no-rewrite"
|
|
|
|
git lfs migrate import --message "$expected_commit_msg" --no-rewrite --yes *.txt
|
|
|
|
# Ensure the git history remained the same
|
|
new_commit_oid="$(git rev-parse HEAD~1)"
|
|
if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure a new commit was made
|
|
new_head_oid="$(git rev-parse HEAD)"
|
|
if [ "$prev_commit_oid" == "$new_oid" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure the provided commit message was used
|
|
commit_msg="$(git log -1 --pretty=format:%s)"
|
|
if [ "$commit_msg" != "$expected_commit_msg" ]; then
|
|
exit 1
|
|
fi
|
|
)
|
|
end_test
|
|
|
|
begin_test "migrate import --no-rewrite (with empty commit message)"
|
|
(
|
|
set -e
|
|
|
|
setup_local_branch_with_gitattrs
|
|
|
|
prev_commit_oid="$(git rev-parse HEAD)"
|
|
|
|
git lfs migrate import -m "" --no-rewrite --yes *.txt
|
|
|
|
# Ensure the git history remained the same
|
|
new_commit_oid="$(git rev-parse HEAD~1)"
|
|
if [ "$prev_commit_oid" != "$new_commit_oid" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure a new commit was made
|
|
new_head_oid="$(git rev-parse HEAD)"
|
|
if [ "$prev_commit_oid" == "$new_oid" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure the provided commit message was used
|
|
commit_msg="$(git log -1 --pretty=format:%s)"
|
|
if [ "$commit_msg" != "" ]; then
|
|
exit 1
|
|
fi
|
|
)
|
|
end_test
|