commands: add additional export test coverage

Add additional integration tests to test various functionality
of the `migrate export` command
This commit is contained in:
Preben Ingvaldsen 2018-06-22 17:11:44 -07:00
parent 3ab80db213
commit 966762b8ab
2 changed files with 307 additions and 7 deletions

@ -7,26 +7,36 @@ begin_test "migrate export (default branch)"
(
set -e
setup_multiple_local_branches
setup_multiple_local_branches_tracked
md_oid="$(calc_oid "$(git cat-file -p :a.md)")"
txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
md_oid="$(calc_oid "$(cat a.md)")"
txt_oid="$(calc_oid "$(cat a.txt)")"
git lfs migrate import
git checkout my-feature
md_feature_oid="$(calc_oid "$(cat a.md)")"
git checkout master
assert_pointer "refs/heads/master" "a.md" "$md_oid" "140"
assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120"
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30"
git lfs migrate export --include="*.md, *.txt"
[ ! $(assert_pointer "refs/heads/master" "a.md" "$md_oid" "140") ]
[ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120") ]
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30"
master="$(git rev-parse refs/heads/master)"
feature="$(git rev-parse refs/heads/my-feature)"
master_attrs="$(git cat-file -p "$master:.gitattributes")"
feature_attrs="$(git cat-file -p "$feature:.gitattributes")"
echo "$master_attrs" | grep -q "*.md text -filter -merge -diff"
echo "$master_attrs" | grep -q "*.txt text -filter -merge -diff"
[ ! $(echo "$feature_attrs" | grep -q "*.md text -filter -merge -diff") ]
[ ! $(echo "$feature_attrs" | grep -q "*.txt text -filter -merge -diff") ]
)
end_test
@ -36,6 +46,8 @@ begin_test "migrate export (with remote)"
setup_single_remote_branch_tracked
git push origin master
md_oid="$(calc_oid "$(cat a.md)")"
txt_oid="$(calc_oid "$(cat a.txt)")"
@ -60,3 +72,228 @@ begin_test "migrate export (with remote)"
echo "$master_attrs" | grep -q "*.txt text -filter -merge -diff"
)
end_test
begin_test "migrate export (include/exclude args)"
(
set -e
setup_multiple_local_branches_tracked
md_oid="$(calc_oid "$(cat a.md)")"
txt_oid="$(calc_oid "$(cat a.txt)")"
assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120"
git lfs migrate export --include="*" --exclude="a.md"
[ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120") ]
assert_pointer "refs/heads/master" "a.md" "$md_oid" "140"
master="$(git rev-parse refs/heads/master)"
master_attrs="$(git cat-file -p "$master:.gitattributes")"
echo "$master_attrs" | grep -q "* text -filter -merge -diff"
echo "$master_attrs" | grep -q "a.md filter=lfs diff=lfs merge=lfs"
)
end_test
begin_test "migrate export (bare repository)"
(
set -e
setup_single_remote_branch_tracked
git push origin master
make_bare
git lfs migrate export --everything --include="*"
)
end_test
begin_test "migrate export (given branch)"
(
set -e
setup_multiple_local_branches_tracked
md_oid="$(calc_oid "$(cat a.md)")"
txt_oid="$(calc_oid "$(cat a.txt)")"
git checkout my-feature
md_feature_oid="$(calc_oid "$(cat a.md)")"
git checkout master
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30"
assert_pointer "refs/heads/my-feature" "a.txt" "$txt_oid" "120"
assert_pointer "refs/heads/master" "a.md" "$md_oid" "140"
assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120"
git lfs migrate export --include="*.md,*.txt" my-feature
[ ! $(assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30") ]
[ ! $(assert_pointer "refs/heads/my-feature" "a.txt" "$txt_oid" "120") ]
[ ! $(assert_pointer "refs/heads/master" "a.md" "$md_oid" "140") ]
[ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "120") ]
master="$(git rev-parse refs/heads/master)"
feature="$(git rev-parse refs/heads/my-feature)"
master_attrs="$(git cat-file -p "$master:.gitattributes")"
feature_attrs="$(git cat-file -p "$feature:.gitattributes")"
echo "$master_attrs" | grep -q "*.md text -filter -merge -diff"
echo "$master_attrs" | grep -q "*.txt text -filter -merge -diff"
echo "$feature_attrs" | grep -q "*.md text -filter -merge -diff"
echo "$feature_attrs" | grep -q "*.txt text -filter -merge -diff"
)
end_test
begin_test "migrate export (no filter)"
(
set -e
setup_multiple_local_branches_tracked
git lfs migrate export 2>&1 | tee migrate.log
if [ ${PIPESTATUS[0]} -eq 0 ]; then
echo >&2 "fatal: expected git lfs migrate export to fail, didn't"
exit 1
fi
grep "fatal: one or more files must be specified with --include" migrate.log
)
end_test
begin_test "migrate export (exclude remote refs)"
(
set -e
setup_single_remote_branch_tracked
md_oid="$(calc_oid "$(cat a.md)")"
txt_oid="$(calc_oid "$(cat a.txt)")"
git checkout refs/remotes/origin/master
md_remote_oid="$(calc_oid "$(cat a.md)")"
txt_remote_oid="$(calc_oid "$(cat a.txt)")"
git checkout master
assert_pointer "refs/heads/master" "a.md" "$md_oid" "50"
assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "30"
assert_pointer "refs/remotes/origin/master" "a.md" "$md_remote_oid" "140"
assert_pointer "refs/remotes/origin/master" "a.txt" "$txt_remote_oid" "120"
git lfs migrate export --include="*.md,*.txt"
[ ! $(assert_pointer "refs/heads/master" "a.md" "$md_oid" "50") ]
[ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_oid" "30") ]
assert_pointer "refs/remotes/origin/master" "a.md" "$md_remote_oid" "140"
assert_pointer "refs/remotes/origin/master" "a.txt" "$txt_remote_oid" "120"
master="$(git rev-parse refs/heads/master)"
remote="$(git rev-parse refs/remotes/origin/master)"
master_attrs="$(git cat-file -p "$master:.gitattributes")"
remote_attrs="$(git cat-file -p "$remote:.gitattributes")"
echo "$master_attrs" | grep -q "*.md text -filter -merge -diff"
echo "$master_attrs" | grep -q "*.txt text -filter -merge -diff"
[ ! $(echo "$remote_attrs" | grep -q "*.md text -filter -merge -diff") ]
[ ! $(echo "$remote_attrs" | grep -q "*.txt text -filter -merge -diff") ]
)
end_test
begin_test "migrate export (--skip-fetch)"
(
set -e
setup_single_remote_branch_tracked
md_master_oid="$(calc_oid "$(cat a.md)")"
txt_master_oid="$(calc_oid "$(cat a.txt)")"
git checkout refs/remotes/origin/master
md_remote_oid="$(calc_oid "$(cat a.md)")"
txt_remote_oid="$(calc_oid "$(cat a.txt)")"
git checkout master
git tag pseudo-remote "$(git rev-parse refs/remotes/origin/master)"
# Remove the refs/remotes/origin/master ref, and instruct 'git lfs migrate' to
# not fetch it.
git update-ref -d refs/remotes/origin/master
assert_pointer "refs/heads/master" "a.md" "$md_master_oid" "50"
assert_pointer "pseudo-remote" "a.md" "$md_remote_oid" "140"
assert_pointer "refs/heads/master" "a.txt" "$txt_master_oid" "30"
assert_pointer "pseudo-remote" "a.txt" "$txt_remote_oid" "120"
git lfs migrate export --skip-fetch --include="*.md,*.txt"
[ ! $(assert_pointer "refs/heads/master" "a.md" "$md_master_oid" "50") ]
[ ! $(assert_pointer "pseudo-remote" "a.md" "$md_remote_oid" "140") ]
[ ! $(assert_pointer "refs/heads/master" "a.txt" "$txt_master_oid" "30") ]
[ ! $(assert_pointer "pseudo-remote" "a.txt" "$txt_remote_oid" "120") ]
master="$(git rev-parse refs/heads/master)"
remote="$(git rev-parse pseudo-remote)"
master_attrs="$(git cat-file -p "$master:.gitattributes")"
remote_attrs="$(git cat-file -p "$remote:.gitattributes")"
echo "$master_attrs" | grep -q "*.md text -filter -merge -diff"
echo "$master_attrs" | grep -q "*.txt text -filter -merge -diff"
echo "$remote_attrs" | grep -q "*.md text -filter -merge -diff"
echo "$remote_attrs" | grep -q "*.txt text -filter -merge -diff"
)
end_test
begin_test "migrate export (include/exclude ref)"
(
set -e
setup_multiple_remote_branches_gitattrs
md_master_oid="$(calc_oid "$(cat a.md)")"
txt_master_oid="$(calc_oid "$(cat a.txt)")"
git checkout refs/remotes/origin/master
md_remote_oid="$(calc_oid "$(cat a.md)")"
txt_remote_oid="$(calc_oid "$(cat a.txt)")"
git checkout my-feature
md_feature_oid="$(calc_oid "$(cat a.md)")"
txt_feature_oid="$(calc_oid "$(cat a.txt)")"
git checkout master
git lfs migrate export \
--include="*.txt" \
--include-ref=refs/heads/my-feature \
--exclude-ref=refs/heads/master
assert_pointer "refs/heads/master" "a.md" "$md_master_oid" "21"
assert_pointer "refs/heads/master" "a.txt" "$txt_master_oid" "20"
assert_pointer "refs/remotes/origin/master" "a.md" "$md_remote_oid" "11"
assert_pointer "refs/remotes/origin/master" "a.txt" "$txt_remote_oid" "10"
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "31"
[ ! $(assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30") ]
master="$(git rev-parse refs/heads/master)"
feature="$(git rev-parse refs/heads/my-feature)"
remote="$(git rev-parse refs/remotes/origin/master)"
master_attrs="$(git cat-file -p "$master:.gitattributes")"
remote_attrs="$(git cat-file -p "$remote:.gitattributes")"
feature_attrs="$(git cat-file -p "$feature:.gitattributes")"
[ ! $(echo "$master_attrs" | grep -q "*.txt text -filter -merge -diff") ]
[ ! $(echo "$remote_attrs" | grep -q "*.txt text -filter -merge -diff") ]
echo "$feature_attrs" | grep -q "*.txt text -filter -merge -diff"
)
end_test

@ -134,6 +134,36 @@ setup_multiple_local_branches_with_gitattrs() {
git commit -m "add .gitattributes"
}
# setup_multiple_local_branches_tracked creates a repo with exactly the same
# structure as in setup_multiple_local_branches, but with all files tracked by
# Git LFS
setup_multiple_local_branches_tracked() {
set -e
reponame="migrate-info-multiple-local-branches"
remove_and_create_local_repo "$reponame"
git lfs track "*.txt" "*.md"
git add .gitattributes
git commit -m "initial commit"
base64 < /dev/urandom | head -c 120 > a.txt
base64 < /dev/urandom | head -c 140 > a.md
git add a.txt a.md
git commit -m "add a.{txt,md}"
git checkout -b my-feature
base64 < /dev/urandom | head -c 30 > a.md
git add a.md
git commit -m "add an additional 30 bytes to a.md"
git checkout master
}
# setup_local_branch_with_space creates a repository as follows:
#
# A
@ -202,7 +232,7 @@ setup_single_remote_branch_with_gitattrs() {
}
# Creates a repo identical to setup_single_remote_branch, except with *.md and
# *.txt files tracked by Git LFS, and all commits pushed to master
# *.txt files tracked by Git LFS
setup_single_remote_branch_tracked() {
set -e
@ -227,8 +257,6 @@ setup_single_remote_branch_tracked() {
git add a.md a.txt
git commit -m "add an additional 30, 50 bytes to a.{txt,md}"
git push origin master
}
# setup_multiple_remote_branches creates a repository as follows:
@ -277,6 +305,41 @@ setup_multiple_remote_branches() {
git checkout master
}
# Creates a repo identical to that in setup_multiple_remote_branches(), but
# with all files tracked by Git LFS
setup_multiple_remote_branches_gitattrs() {
set -e
reponame="migrate-info-exclude-remote-refs-given-branch"
remove_and_create_remote_repo "$reponame"
git lfs track "*.txt" "*.md"
git add .gitattributes
git commit -m "initial commit"
base64 < /dev/urandom | head -c 10 > a.txt
base64 < /dev/urandom | head -c 11 > a.md
git add a.txt a.md
git commit -m "add 10, 11 bytes, a.{txt,md}"
git push origin master
base64 < /dev/urandom | head -c 20 > a.txt
base64 < /dev/urandom | head -c 21 > a.md
git add a.txt a.md
git commit -m "add 20, 21 bytes, a.{txt,md}"
git checkout -b my-feature
base64 < /dev/urandom | head -c 30 > a.txt
base64 < /dev/urandom | head -c 31 > a.md
git add a.txt a.md
git commit -m "add 30, 31 bytes, a.{txt,md}"
git checkout master
}
# setup_single_local_branch_with_tags creates a repository as follows:
#
# A---B