git-lfs/t/t-migrate-info.sh
Chris Darroch 4800c5e988 commands,docs,t: add migrate info --fixup option
We add a --fixup option to the "git lfs migrate info"
command which has similar properties as the --fixup option
to the "git lfs migrate import" command, namely that it
looks for files in the repository which should be Git LFS
pointers (according to the filter settings in .gitattributes)
but which are not.

In the case of the "migrate info" command this new option
only reports the sum totals for any such files, and does
not make any changes to the repository.  When the --fixup
option is supplied, the "migrate info" command will not
output a summary of any other files, including .gitattributes
files, which are otherwise normally included in the command's
final output.

The new --fixup option is taken to imply the --pointers=ignore
option, and is incompatible with any other settings of that
option.
2021-05-16 22:34:47 -07:00

907 lines
23 KiB
Bash
Executable File

#!/usr/bin/env bash
. "$(dirname "$0")/fixtures/migrate.sh"
. "$(dirname "$0")/testlib.sh"
begin_test "migrate info (default branch)"
(
set -e
setup_multiple_local_branches
original_head="$(git rev-parse HEAD)"
diff -u <(git lfs migrate info 2>&1 | tail -n 2) <(cat <<-EOF
*.md 140 B 1/1 files(s) 100%
*.txt 120 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (bare repository)"
(
set -e
setup_multiple_remote_branches
git lfs migrate info --everything
)
end_test
begin_test "migrate info (given branch)"
(
set -e
setup_multiple_local_branches
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
diff -u <(git lfs migrate info my-feature 2>&1 | tail -n 2) <(cat <<-EOF
*.md 170 B 2/2 files(s) 100%
*.txt 120 B 1/1 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (default branch with filter)"
(
set -e
setup_multiple_local_branches
original_head="$(git rev-parse HEAD)"
diff -u <(git lfs migrate info --include "*.md" 2>&1 | tail -n 1) <(cat <<-EOF
*.md 140 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "refs/heads/main" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (given branch with filter)"
(
set -e
setup_multiple_local_branches
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
diff -u <(git lfs migrate info --include "*.md" my-feature 2>&1 | tail -n 1) <(cat <<-EOF
*.md 170 B 2/2 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (default branch, exclude remote refs)"
(
set -e
setup_single_remote_branch
git show-ref
original_remote="$(git rev-parse refs/remotes/origin/main)"
original_main="$(git rev-parse refs/heads/main)"
diff -u <(git lfs migrate info 2>&1 | tail -n 2) <(cat <<-EOF
*.md 50 B 1/1 files(s) 100%
*.txt 30 B 1/1 files(s) 100%
EOF)
migrated_remote="$(git rev-parse refs/remotes/origin/main)"
migrated_main="$(git rev-parse refs/heads/main)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/remotes/origin/main" "$original_remote" "$migrated_remote"
)
end_test
begin_test "migrate info (given branch, exclude remote refs)"
(
set -e
setup_multiple_remote_branches
original_remote="$(git rev-parse refs/remotes/origin/main)"
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
diff -u <(git lfs migrate info my-feature 2>&1 | tail -n 2) <(cat <<-EOF
*.md 52 B 2/2 files(s) 100%
*.txt 50 B 2/2 files(s) 100%
EOF)
migrated_remote="$(git rev-parse refs/remotes/origin/main)"
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/remotes/origin/main" "$original_remote" "$migrated_remote"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (given ref, --skip-fetch)"
(
set -e
setup_single_remote_branch
original_remote="$(git rev-parse refs/remotes/origin/main)"
original_main="$(git rev-parse refs/heads/main)"
git tag pseudo-remote "$original_remote"
# Remove the refs/remotes/origin/main ref, and instruct 'git lfs migrate' to
# not fetch it.
git update-ref -d refs/remotes/origin/main
diff -u <(git lfs migrate info --skip-fetch 2>&1 | tail -n 2) <(cat <<-EOF
*.md 190 B 2/2 files(s) 100%
*.txt 150 B 2/2 files(s) 100%
EOF)
migrated_remote="$(git rev-parse pseudo-remote)"
migrated_main="$(git rev-parse refs/heads/main)"
assert_ref_unmoved "refs/remotes/origin/main" "$original_remote" "$migrated_remote"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
)
end_test
begin_test "migrate info (include/exclude ref)"
(
set -e
setup_multiple_remote_branches
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
diff -u <(git lfs migrate info \
--include-ref=refs/heads/my-feature \
--exclude-ref=refs/heads/main 2>&1 | tail -n 2) <(cat <<-EOF
*.md 31 B 1/1 files(s) 100%
*.txt 30 B 1/1 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (include/exclude ref args)"
(
set -e
setup_multiple_remote_branches
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
diff -u <(git lfs migrate info \
my-feature ^main 2>&1 | tail -n 2) <(cat <<-EOF
*.md 31 B 1/1 files(s) 100%
*.txt 30 B 1/1 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (include/exclude ref with filter)"
(
set -e
setup_multiple_remote_branches
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
diff -u <(git lfs migrate info \
--include="*.txt" \
--include-ref=refs/heads/my-feature \
--exclude-ref=refs/heads/main 2>&1 | tail -n 1) <(cat <<-EOF
*.txt 30 B 1/1 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (nested sub-trees, no filter)"
(
set -e
setup_single_local_branch_deep_trees
original_main="$(git rev-parse refs/heads/main)"
diff -u <(git lfs migrate info 2>/dev/null) <(cat <<-EOF
*.txt 120 B 1/1 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
)
end_test
begin_test "migrate info (above threshold)"
(
set -e
setup_multiple_local_branches
original_head="$(git rev-parse HEAD)"
diff -u <(git lfs migrate info --above=130B 2>&1 | tail -n 1) <(cat <<-EOF
*.md 140 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (above threshold, top)"
(
set -e
setup_multiple_local_branches
base64 < /dev/urandom | head -c 160 > b.bin
git add b.bin
git commit -m "b.bin"
original_head="$(git rev-parse HEAD)"
# Ensure command reports only single highest entry due to --top=1 argument.
diff -u <(git lfs migrate info --above=130B --top=1 2>&1 | tail -n 1) <(cat <<-EOF
*.bin 160 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (top)"
(
set -e
setup_multiple_local_branches
base64 < /dev/urandom | head -c 160 > b.bin
git add b.bin
git commit -m "b.bin"
original_head="$(git rev-parse HEAD)"
# Ensure command reports nothing if --top argument is less than zero.
[ "0" -eq "$(git lfs migrate info --everything --top=-1 2>/dev/null | wc -l)" ]
# Ensure command reports nothing if --top argument is zero.
[ "0" -eq "$(git lfs migrate info --everything --top=0 2>/dev/null | wc -l)" ]
# Ensure command reports no more entries than specified by --top argument.
diff -u <(git lfs migrate info --everything --top=2 2>&1 | tail -n 2) <(cat <<-EOF
*.md 170 B 2/2 files(s) 100%
*.bin 160 B 1/1 files(s) 100%
EOF)
# Ensure command succeeds if --top argument is greater than total number of entries.
diff -u <(git lfs migrate info --everything --top=10 2>&1 | tail -n 3) <(cat <<-EOF
*.md 170 B 2/2 files(s) 100%
*.bin 160 B 1/1 files(s) 100%
*.txt 120 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (given unit)"
(
set -e
setup_multiple_local_branches
original_head="$(git rev-parse HEAD)"
diff -u <(git lfs migrate info --unit=kb 2>&1 | tail -n 2) <(cat <<-EOF
*.md 0.1 1/1 files(s) 100%
*.txt 0.1 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (doesn't show empty info entries)"
(
set -e
setup_multiple_local_branches
original_head="$(git rev-parse HEAD)"
[ "0" -eq "$(git lfs migrate info --above=1mb 2>/dev/null | wc -l)" ]
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (empty set)"
(
set -e
setup_multiple_local_branches
migrate="$(git lfs migrate info \
--include-ref=refs/heads/main \
--exclude-ref=refs/heads/main 2>/dev/null
)"
[ "0" -eq "$(echo -n "$migrate" | wc -c | awk '{ print $1 }')" ]
)
end_test
begin_test "migrate info (no-extension files)"
(
set -e
setup_multiple_local_branches_with_alternate_names
git checkout main
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
diff -u <(git lfs migrate info --everything 2>&1 | tail -n 2) <(cat <<-EOF
no_extension 220 B 2/2 files(s) 100%
*.txt 170 B 2/2 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (--everything)"
(
set -e
setup_multiple_local_branches
git checkout main
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
diff -u <(git lfs migrate info --everything 2>&1 | tail -n 2) <(cat <<-EOF
*.md 170 B 2/2 files(s) 100%
*.txt 120 B 1/1 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (--fixup, no .gitattributes)"
(
set -e
setup_multiple_local_branches
original_head="$(git rev-parse HEAD)"
# Ensure "fixup" command reports nothing if no files are tracked by LFS.
[ "0" -eq "$(git lfs migrate info --everything --fixup 2>/dev/null | wc -l)" ]
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (all files tracked)"
(
set -e
setup_single_local_branch_tracked
original_head="$(git rev-parse HEAD)"
# Ensure default command reports objects if all files are tracked by LFS.
diff -u <(git lfs migrate info 2>&1 | tail -n 3) <(cat <<-EOF
*.gitattributes 83 B 1/1 files(s) 100%
LFS Objects 260 B 2/2 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (all files tracked, --pointers=follow)"
(
set -e
setup_single_local_branch_tracked
original_head="$(git rev-parse HEAD)"
# Ensure "follow" command reports objects if all files are tracked by LFS.
diff -u <(git lfs migrate info --pointers=follow 2>&1 | tail -n 3) <(cat <<-EOF
*.gitattributes 83 B 1/1 files(s) 100%
LFS Objects 260 B 2/2 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (all files tracked, --pointers=no-follow)"
(
set -e
setup_single_local_branch_tracked
original_head="$(git rev-parse HEAD)"
# Ensure "no-follow" command reports pointers if all files are tracked by LFS.
diff -u <(git lfs migrate info --pointers=no-follow 2>&1 | tail -n 3) <(cat <<-EOF
*.md 128 B 1/1 files(s) 100%
*.txt 128 B 1/1 files(s) 100%
*.gitattributes 83 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (all files tracked, --pointers=ignore)"
(
set -e
setup_single_local_branch_tracked
original_head="$(git rev-parse HEAD)"
# Ensure "ignore" command reports no objects if all files are tracked by LFS.
diff -u <(git lfs migrate info --pointers=ignore 2>&1 | tail -n 1) <(cat <<-EOF
*.gitattributes 83 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (all files tracked, --fixup)"
(
set -e
setup_single_local_branch_tracked
original_head="$(git rev-parse HEAD)"
# Ensure "fixup" command reports nothing if all files are tracked by LFS.
[ "0" -eq "$(git lfs migrate info --fixup 2>/dev/null | wc -l)" ]
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (all files tracked, --everything)"
(
set -e
setup_multiple_local_branches_tracked
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
# Ensure default command reports objects if all files are tracked by LFS.
diff -u <(git lfs migrate info --everything 2>&1 | tail -n 3) <(cat <<-EOF
*.gitattributes 83 B 1/1 files(s) 100%
LFS Objects 290 B 3/3 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (all files tracked, --everything and --pointers=follow)"
(
set -e
setup_multiple_local_branches_tracked
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
# Ensure "follow" command reports objects if all files are tracked by LFS.
diff -u <(git lfs migrate info --everything --pointers=follow 2>&1 | tail -n 3) <(cat <<-EOF
*.gitattributes 83 B 1/1 files(s) 100%
LFS Objects 290 B 3/3 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (all files tracked, --everything and --pointers=no-follow)"
(
set -e
setup_multiple_local_branches_tracked
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
# Ensure "no-follow" command reports pointers if all files are tracked by LFS.
diff -u <(git lfs migrate info --everything --pointers=no-follow 2>&1 | tail -n 3) <(cat <<-EOF
*.md 255 B 2/2 files(s) 100%
*.txt 128 B 1/1 files(s) 100%
*.gitattributes 83 B 1/1 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (all files tracked, --everything and --pointers=ignore)"
(
set -e
setup_multiple_local_branches_tracked
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
# Ensure "ignore" command reports no objects if all files are tracked by LFS.
diff -u <(git lfs migrate info --everything --pointers=ignore 2>&1 | tail -n 1) <(cat <<-EOF
*.gitattributes 83 B 1/1 files(s) 100%
EOF)
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (all files tracked, --everything and --fixup)"
(
set -e
setup_multiple_local_branches_tracked
original_main="$(git rev-parse refs/heads/main)"
original_feature="$(git rev-parse refs/heads/my-feature)"
# Ensure "fixup" command reports nothing if all files are tracked by LFS.
[ "0" -eq "$(git lfs migrate info --everything --fixup 2>/dev/null | wc -l)" ]
migrated_main="$(git rev-parse refs/heads/main)"
migrated_feature="$(git rev-parse refs/heads/my-feature)"
assert_ref_unmoved "refs/heads/main" "$original_main" "$migrated_main"
assert_ref_unmoved "refs/heads/my-feature" "$original_feature" "$migrated_feature"
)
end_test
begin_test "migrate info (potential fixup)"
(
set -e
setup_single_local_branch_tracked_corrupt
original_head="$(git rev-parse HEAD)"
# Ensure command reports files which should be tracked but have not been
# stored properly as LFS pointers.
diff -u <(git lfs migrate info 2>&1 | tail -n 2) <(cat <<-EOF
*.txt 120 B 1/1 files(s) 100%
*.gitattributes 42 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (potential fixup, --fixup)"
(
set -e
setup_single_local_branch_tracked_corrupt
original_head="$(git rev-parse HEAD)"
# Ensure "fixup" command reports files which should be tracked but have not
# been stored properly as LFS pointers, and ignores .gitattributes files.
diff -u <(git lfs migrate info --fixup 2>&1 | tail -n 1) <(cat <<-EOF
*.txt 120 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (potential fixup, complex nested)"
(
set -e
setup_single_local_branch_complex_tracked
original_head="$(git rev-parse HEAD)"
# Ensure command reports the file which should be tracked but has not been
# stored properly (a.txt) and the file which is not tracked (dir/b.txt).
diff -u <(git lfs migrate info 2>&1 | tail -n 2) <(cat <<-EOF
*.gitattributes 69 B 2/2 files(s) 100%
*.txt 2 B 2/2 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (potential fixup, complex nested, --fixup)"
(
set -e
setup_single_local_branch_complex_tracked
original_head="$(git rev-parse HEAD)"
# Ensure "fixup" command reports the file which should be tracked but has not
# been stored properly (a.txt), and ignores .gitattributes files and
# the file which is not tracked (dir/b.txt).
diff -u <(git lfs migrate info --fixup 2>&1 | tail -n 1) <(cat <<-EOF
*.txt 1 B 1/1 files(s) 100%
EOF)
migrated_head="$(git rev-parse HEAD)"
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
)
end_test
begin_test "migrate info (ambiguous reference)"
(
set -e
setup_multiple_local_branches
# Create an ambiguously named reference sharing the name as the SHA-1 of
# "HEAD".
sha="$(git rev-parse HEAD)"
git tag "$sha"
git lfs migrate info --everything
)
end_test
begin_test "migrate info (--everything with args)"
(
set -e
setup_multiple_local_branches
git lfs migrate info --everything main 2>&1 | tee migrate.log
if [ "${PIPESTATUS[0]}" -eq 1 ]; then
echo >&2 "fatal: expected 'git lfs migrate ...' to fail, didn't ..."
exit 1
fi
grep -q "fatal: cannot use --everything with explicit reference arguments" \
migrate.log
)
end_test
begin_test "migrate info (--everything with --include-ref)"
(
set -e
setup_multiple_local_branches
git lfs migrate info --everything --include-ref=refs/heads/main 2>&1 | \
tee migrate.log
if [ "${PIPESTATUS[0]}" -eq 1 ]; then
echo >&2 "fatal: expected 'git lfs migrate ...' to fail, didn't ..."
exit 1
fi
grep -q "fatal: cannot use --everything with --include-ref or --exclude-ref" \
migrate.log
)
end_test
begin_test "migrate info (--everything with --exclude-ref)"
(
set -e
setup_multiple_local_branches
git lfs migrate info --everything --exclude-ref=refs/heads/main 2>&1 | \
tee migrate.log
if [ "${PIPESTATUS[0]}" -eq 1 ]; then
echo >&2 "fatal: expected 'git lfs migrate ...' to fail, didn't ..."
exit 1
fi
grep -q "fatal: cannot use --everything with --include-ref or --exclude-ref" \
migrate.log
)
end_test
begin_test "migrate info (--pointers invalid)"
(
set -e
setup_multiple_local_branches
git lfs migrate info --everything --pointers=foo 2>&1 | tee migrate.log
if [ "${PIPESTATUS[0]}" -eq 1 ]; then
echo >&2 "fatal: expected 'git lfs migrate ...' to fail, didn't ..."
exit 1
fi
grep -q "fatal: unsupported --pointers option value" migrate.log
)
end_test
begin_test "migrate info (--fixup, --pointers=follow)"
(
set -e
setup_single_local_branch_tracked_corrupt
git lfs migrate info --everything --fixup --pointers=follow 2>&1 \
| tee migrate.log
if [ "${PIPESTATUS[0]}" -eq 1 ]; then
echo >&2 "fatal: expected 'git lfs migrate ...' to fail, didn't ..."
exit 1
fi
grep -q "fatal: cannot use --fixup with --pointers=follow" migrate.log
)
end_test
begin_test "migrate info (--fixup, --pointers=no-follow)"
(
set -e
setup_single_local_branch_tracked_corrupt
git lfs migrate info --everything --fixup --pointers=no-follow 2>&1 \
| tee migrate.log
if [ "${PIPESTATUS[0]}" -eq 0 ]; then
echo >&2 "fatal: expected 'git lfs migrate ...' to fail, didn't ..."
exit 1
fi
grep -q "fatal: cannot use --fixup with --pointers=no-follow" migrate.log
)
end_test
begin_test "migrate info (--fixup, --include)"
(
set -e
setup_single_local_branch_tracked_corrupt
git lfs migrate info --everything --fixup --include="*.txt" 2>&1 \
| tee migrate.log
if [ "${PIPESTATUS[0]}" -eq 0 ]; then
echo >&2 "fatal: expected 'git lfs migrate ...' to fail, didn't ..."
exit 1
fi
grep -q "fatal: cannot use --fixup with --include, --exclude" migrate.log
)
end_test
begin_test "migrate info (--fixup, --exclude)"
(
set -e
setup_single_local_branch_tracked_corrupt
git lfs migrate info --everything --fixup --exclude="*.txt" 2>&1 \
| tee migrate.log
if [ "${PIPESTATUS[0]}" -eq 0 ]; then
echo >&2 "fatal: expected 'git lfs migrate ...' to fail, didn't ..."
exit 1
fi
grep -q "fatal: cannot use --fixup with --include, --exclude" migrate.log
)
end_test