2017-06-23 18:41:55 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
2018-07-11 18:15:53 +00:00
|
|
|
. "$(dirname "$0")/fixtures/migrate.sh"
|
2018-07-10 18:48:02 +00:00
|
|
|
. "$(dirname "$0")/testlib.sh"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
begin_test "migrate import (default branch)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
|
|
|
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
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_oid" "140"
|
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_oid" "120"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
assert_local_object "$md_oid" "140"
|
|
|
|
assert_local_object "$txt_oid" "120"
|
|
|
|
refute_local_object "$md_feature_oid" "30"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
feature="$(git rev-parse refs/heads/my-feature)"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
2017-06-23 21:53:41 +00:00
|
|
|
[ ! $(git cat-file -p "$feature:.gitattributes") ]
|
2017-06-23 18:41:55 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
echo "$main_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$main_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs"
|
commands/command_migrate_import.go: install hooks
When migrating a repository to use Git LFS for the first time, a user is
also required to run 'git lfs install' inside of their newly-migrated
repository, lest they are unable to push.
This is due to the fact that 'git lfs install' writes
.git/hooks/pre-push, which Git invokes, in turn invoking Git LFS to push
Git LFS objects to the remote before sending Git objects.
Without this, we will push only plain-text pointer files, which puts the
pusher at risk of loosing data, or failing any provider-specific
verification/integrity checks.
So, let's run installHooks() to place hooks in the right place, which
makes the following command sequence possible:
$ git lfs migrate import ...
$ git push --all
Let's avoid running this in 'git lfs migrate info' and 'git lfs migrate
export', since neither require it.
2018-09-05 14:49:23 +00:00
|
|
|
|
|
|
|
# Ensure that hooks are installed. If we find 'git-lfs' somewhere in
|
|
|
|
# .git/hooks/pre-push we assume that the rest went correctly, too.
|
|
|
|
grep -q "git-lfs" .git/hooks/pre-push
|
2017-06-23 18:41:55 +00:00
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-12-05 02:53:08 +00:00
|
|
|
begin_test "migrate import (bare repository)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_remote_branches
|
|
|
|
|
|
|
|
git lfs migrate import --everything
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-06-23 18:41:55 +00:00
|
|
|
begin_test "migrate import (given branch)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
|
|
|
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 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"
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_oid" "140"
|
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_oid" "120"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
assert_local_object "$md_oid" "140"
|
|
|
|
assert_local_object "$md_feature_oid" "30"
|
|
|
|
assert_local_object "$txt_oid" "120"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
feature="$(git rev-parse refs/heads/my-feature)"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
2017-06-23 21:53:41 +00:00
|
|
|
feature_attrs="$(git cat-file -p "$feature:.gitattributes")"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
echo "$main_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$main_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs"
|
2017-06-23 18:41:55 +00:00
|
|
|
echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$feature_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (default branch with filter)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
|
|
|
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 --include "*.md"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_oid" "140"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
assert_local_object "$md_oid" "140"
|
|
|
|
refute_local_object "$txt_oid" "120"
|
|
|
|
refute_local_object "$md_feature_oid" "30"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
feature="$(git rev-parse refs/heads/my-feature)"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
2017-06-23 21:53:41 +00:00
|
|
|
[ ! $(git cat-file -p "$feature:.gitattributes") ]
|
2017-06-23 18:41:55 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
echo "$main_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$main_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs"
|
2017-06-23 18:41:55 +00:00
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (given branch with filter)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
|
|
|
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 --include "*.md" my-feature
|
|
|
|
|
|
|
|
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30"
|
|
|
|
assert_pointer "refs/heads/my-feature~1" "a.md" "$md_oid" "140"
|
|
|
|
|
|
|
|
assert_local_object "$md_oid" "140"
|
|
|
|
assert_local_object "$md_feature_oid" "30"
|
|
|
|
refute_local_object "$txt_oid" "120"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
feature="$(git rev-parse refs/heads/my-feature)"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
2017-06-23 21:53:41 +00:00
|
|
|
feature_attrs="$(git cat-file -p "$feature:.gitattributes")"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
echo "$main_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$main_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs"
|
2017-06-23 18:41:55 +00:00
|
|
|
echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$feature_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (default branch, exclude remote refs)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_single_remote_branch
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.md")")"
|
|
|
|
txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.txt")")"
|
|
|
|
md_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.md")")"
|
|
|
|
txt_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
git lfs migrate import
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_oid" "50"
|
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_oid" "30"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
assert_local_object "$md_oid" "50"
|
|
|
|
assert_local_object "$txt_oid" "30"
|
|
|
|
refute_local_object "$md_remote_oid" "140"
|
|
|
|
refute_local_object "$txt_remote_oid" "120"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
|
|
|
remote="$(git rev-parse refs/remotes/origin/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
2017-06-23 21:53:41 +00:00
|
|
|
[ ! $(git cat-file -p "$remote:.gitattributes") ]
|
2017-06-23 18:41:55 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
echo "$main_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$main_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs"
|
2017-06-23 18:41:55 +00:00
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (given branch, exclude remote refs)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_remote_branches
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
md_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.md")")"
|
|
|
|
md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.md")")"
|
2017-06-23 19:04:19 +00:00
|
|
|
md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")"
|
2020-06-29 16:18:57 +00:00
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
|
|
|
txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.txt")")"
|
2017-06-23 19:04:19 +00:00
|
|
|
txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
git lfs migrate import my-feature
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_main_oid" "21"
|
2017-06-23 18:41:55 +00:00
|
|
|
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "31"
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_main_oid" "20"
|
2017-06-23 18:41:55 +00:00
|
|
|
assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30"
|
|
|
|
|
|
|
|
assert_local_object "$md_feature_oid" "31"
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_local_object "$md_main_oid" "21"
|
2017-06-23 18:41:55 +00:00
|
|
|
assert_local_object "$txt_feature_oid" "30"
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_local_object "$txt_main_oid" "20"
|
2017-06-23 18:41:55 +00:00
|
|
|
refute_local_object "$md_remote_oid" "11"
|
|
|
|
refute_local_object "$txt_remote_oid" "10"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
feature="$(git rev-parse refs/heads/my-feature)"
|
2020-06-29 16:18:57 +00:00
|
|
|
remote="$(git rev-parse refs/remotes/origin/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
2017-06-23 21:53:41 +00:00
|
|
|
[ ! $(git cat-file -p "$remote:.gitattributes") ]
|
|
|
|
feature_attrs="$(git cat-file -p "$feature:.gitattributes")"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
echo "$main_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$main_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs"
|
2017-06-23 18:41:55 +00:00
|
|
|
echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$feature_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-11-20 17:48:50 +00:00
|
|
|
begin_test "migrate import (given ref, --skip-fetch)"
|
2017-11-17 16:46:13 +00:00
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_single_remote_branch
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
md_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.md")")"
|
|
|
|
md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.md")")"
|
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
|
|
|
txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.txt")")"
|
2017-11-17 16:46:13 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
git tag pseudo-remote "$(git rev-parse refs/remotes/origin/main)"
|
|
|
|
# Remove the refs/remotes/origin/main ref, and instruct 'git lfs migrate' to
|
2017-11-17 16:46:13 +00:00
|
|
|
# not fetch it.
|
2020-06-29 16:18:57 +00:00
|
|
|
git update-ref -d refs/remotes/origin/main
|
2017-11-17 16:46:13 +00:00
|
|
|
|
2017-11-20 17:48:50 +00:00
|
|
|
git lfs migrate import --skip-fetch
|
2017-11-17 16:46:13 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_main_oid" "50"
|
2017-11-17 16:46:13 +00:00
|
|
|
assert_pointer "pseudo-remote" "a.md" "$md_remote_oid" "140"
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_main_oid" "30"
|
2017-11-17 16:46:13 +00:00
|
|
|
assert_pointer "pseudo-remote" "a.txt" "$txt_remote_oid" "120"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_local_object "$md_main_oid" "50"
|
|
|
|
assert_local_object "$txt_main_oid" "30"
|
2017-11-17 16:46:13 +00:00
|
|
|
assert_local_object "$md_remote_oid" "140"
|
|
|
|
assert_local_object "$txt_remote_oid" "120"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-11-17 16:46:13 +00:00
|
|
|
remote="$(git rev-parse pseudo-remote)"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
2017-11-17 16:46:13 +00:00
|
|
|
remote_attrs="$(git cat-file -p "$remote:.gitattributes")"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
echo "$main_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$main_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs"
|
2017-11-17 16:46:13 +00:00
|
|
|
echo "$remote_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$remote_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-12-11 23:24:06 +00:00
|
|
|
begin_test "migrate import (un-annotated tags)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_single_local_branch_with_tags
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
2017-12-11 23:24:06 +00:00
|
|
|
|
|
|
|
git lfs migrate import --everything
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_main_oid" "2"
|
|
|
|
assert_local_object "$txt_main_oid" "2"
|
2017-12-11 23:24:06 +00:00
|
|
|
|
|
|
|
git tag --points-at "$(git rev-parse HEAD)" | grep -q "v1.0.0"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (annotated tags)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_single_local_branch_with_annotated_tags
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
2017-12-11 23:24:06 +00:00
|
|
|
|
|
|
|
git lfs migrate import --everything
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_main_oid" "2"
|
|
|
|
assert_local_object "$txt_main_oid" "2"
|
2017-12-11 23:24:06 +00:00
|
|
|
|
|
|
|
git tag --points-at "$(git rev-parse HEAD)" | grep -q "v1.0.0"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-06-23 18:41:55 +00:00
|
|
|
begin_test "migrate import (include/exclude ref)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_remote_branches
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
md_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.md")")"
|
|
|
|
md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.md")")"
|
2017-06-23 19:04:19 +00:00
|
|
|
md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")"
|
2020-06-29 16:18:57 +00:00
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
|
|
|
txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.txt")")"
|
2017-06-23 19:04:19 +00:00
|
|
|
txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
git lfs migrate import \
|
|
|
|
--include-ref=refs/heads/my-feature \
|
2020-06-29 16:18:57 +00:00
|
|
|
--exclude-ref=refs/heads/main
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "31"
|
|
|
|
assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30"
|
|
|
|
|
|
|
|
assert_local_object "$md_feature_oid" "31"
|
2020-06-29 16:18:57 +00:00
|
|
|
refute_local_object "$md_main_oid" "21"
|
2017-06-23 18:41:55 +00:00
|
|
|
assert_local_object "$txt_feature_oid" "30"
|
2020-06-29 16:18:57 +00:00
|
|
|
refute_local_object "$txt_main_oid" "20"
|
2017-06-23 18:41:55 +00:00
|
|
|
refute_local_object "$md_remote_oid" "11"
|
|
|
|
refute_local_object "$txt_remote_oid" "10"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
feature="$(git rev-parse refs/heads/my-feature)"
|
2020-06-29 16:18:57 +00:00
|
|
|
remote="$(git rev-parse refs/remotes/origin/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
[ ! $(git cat-file -p "$main:.gitattributes") ]
|
2017-06-23 21:53:41 +00:00
|
|
|
[ ! $(git cat-file -p "$remote:.gitattributes") ]
|
|
|
|
feature_attrs="$(git cat-file -p "$feature:.gitattributes")"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
2017-12-13 19:13:11 +00:00
|
|
|
echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$feature_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (include/exclude ref args)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_remote_branches
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
md_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.md")")"
|
|
|
|
md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.md")")"
|
2017-12-13 19:13:11 +00:00
|
|
|
md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")"
|
2020-06-29 16:18:57 +00:00
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
|
|
|
txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.txt")")"
|
2017-12-13 19:13:11 +00:00
|
|
|
txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
git lfs migrate import my-feature ^main
|
2017-12-13 19:13:11 +00:00
|
|
|
|
|
|
|
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "31"
|
|
|
|
assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30"
|
|
|
|
|
|
|
|
assert_local_object "$md_feature_oid" "31"
|
2020-06-29 16:18:57 +00:00
|
|
|
refute_local_object "$md_main_oid" "21"
|
2017-12-13 19:13:11 +00:00
|
|
|
assert_local_object "$txt_feature_oid" "30"
|
2020-06-29 16:18:57 +00:00
|
|
|
refute_local_object "$txt_main_oid" "20"
|
2017-12-13 19:13:11 +00:00
|
|
|
refute_local_object "$md_remote_oid" "11"
|
|
|
|
refute_local_object "$txt_remote_oid" "10"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-12-13 19:13:11 +00:00
|
|
|
feature="$(git rev-parse refs/heads/my-feature)"
|
2020-06-29 16:18:57 +00:00
|
|
|
remote="$(git rev-parse refs/remotes/origin/main)"
|
2017-12-13 19:13:11 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
[ ! $(git cat-file -p "$main:.gitattributes") ]
|
2017-12-13 19:13:11 +00:00
|
|
|
[ ! $(git cat-file -p "$remote:.gitattributes") ]
|
|
|
|
feature_attrs="$(git cat-file -p "$feature:.gitattributes")"
|
|
|
|
|
2017-06-23 18:41:55 +00:00
|
|
|
echo "$feature_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$feature_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (include/exclude ref with filter)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_remote_branches
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
md_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.md")")"
|
|
|
|
md_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.md")")"
|
2017-06-23 19:04:19 +00:00
|
|
|
md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")"
|
2020-06-29 16:18:57 +00:00
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
|
|
|
txt_remote_oid="$(calc_oid "$(git cat-file -p "refs/remotes/origin/main:a.txt")")"
|
2017-06-23 19:04:19 +00:00
|
|
|
txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
git lfs migrate import \
|
|
|
|
--include="*.txt" \
|
|
|
|
--include-ref=refs/heads/my-feature \
|
2020-06-29 16:18:57 +00:00
|
|
|
--exclude-ref=refs/heads/main
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
assert_pointer "refs/heads/my-feature" "a.txt" "$txt_feature_oid" "30"
|
|
|
|
|
|
|
|
refute_local_object "$md_feature_oid" "31"
|
2020-06-29 16:18:57 +00:00
|
|
|
refute_local_object "$md_main_oid" "21"
|
2017-06-23 18:41:55 +00:00
|
|
|
assert_local_object "$txt_feature_oid" "30"
|
2020-06-29 16:18:57 +00:00
|
|
|
refute_local_object "$txt_main_oid" "20"
|
2017-06-23 18:41:55 +00:00
|
|
|
refute_local_object "$md_remote_oid" "11"
|
|
|
|
refute_local_object "$txt_remote_oid" "10"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
feature="$(git rev-parse refs/heads/my-feature)"
|
2020-06-29 16:18:57 +00:00
|
|
|
remote="$(git rev-parse refs/remotes/origin/main)"
|
2017-06-23 21:53:41 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
[ ! $(git cat-file -p "$main:.gitattributes") ]
|
2017-06-23 21:53:41 +00:00
|
|
|
[ ! $(git cat-file -p "$remote:.gitattributes") ]
|
|
|
|
feature_attrs="$(git cat-file -p "$feature:.gitattributes")"
|
2017-06-23 18:41:55 +00:00
|
|
|
|
|
|
|
echo "$feature_attrs" | grep -vq "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$feature_attrs" | grep -q "*.txt filter=lfs diff=lfs merge=lfs"
|
|
|
|
)
|
|
|
|
end_test
|
2017-06-26 17:27:21 +00:00
|
|
|
|
2020-10-09 00:50:34 +00:00
|
|
|
begin_test "migrate import (above)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
setup_single_local_branch_untracked
|
|
|
|
|
|
|
|
md_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.md")")"
|
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
|
|
|
|
|
|
|
git lfs migrate import --above 121B
|
|
|
|
# Ensure that 'a.md', whose size is above our 121 byte threshold
|
|
|
|
# was converted into a git-lfs pointer by the migration.
|
|
|
|
assert_local_object "$md_main_oid" "140"
|
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_main_oid" "140"
|
2020-11-23 21:52:12 +00:00
|
|
|
refute_pointer "refs/heads/main" "a.txt" "$txt_main_oid" "120"
|
2020-10-09 00:50:34 +00:00
|
|
|
refute_local_object "$txt_main_oid" "120"
|
|
|
|
|
|
|
|
# The migration should have identified that *.md files are now
|
|
|
|
# tracked because it migrated a.md
|
|
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
|
|
|
|
|
|
|
echo "$main_attrs" | grep -q "*.md filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$main_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2020-11-23 21:54:34 +00:00
|
|
|
begin_test "migrate import (above without extension)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
setup_single_local_branch_untracked "just-b"
|
|
|
|
|
|
|
|
b_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:just-b")")"
|
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
|
|
|
|
|
|
|
git lfs migrate import --above 121B
|
|
|
|
# Ensure that 'b', whose size is above our 121 byte threshold
|
|
|
|
# was converted into a git-lfs pointer by the migration.
|
|
|
|
assert_local_object "$b_main_oid" "140"
|
|
|
|
assert_pointer "refs/heads/main" "just-b" "$b_main_oid" "140"
|
|
|
|
refute_pointer "refs/heads/main" "a.txt" "$txt_main_oid" "120"
|
|
|
|
refute_local_object "$txt_main_oid" "120"
|
|
|
|
|
|
|
|
# The migration should have identified that /b is now tracked
|
|
|
|
# because it migrated it.
|
|
|
|
main_attrs="$(git cat-file -p "$main:.gitattributes")"
|
|
|
|
|
|
|
|
echo "$main_attrs" | grep -q "/just-b filter=lfs diff=lfs merge=lfs"
|
|
|
|
echo "$main_attrs" | grep -vq "*.txt filter=lfs diff=lfs merge=lfs"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-06-26 17:27:21 +00:00
|
|
|
begin_test "migrate import (existing .gitattributes)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_local_branch_with_gitattrs
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2017-06-26 17:27:21 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "$main:a.txt")")"
|
2017-06-26 17:27:21 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
git lfs migrate import --yes --include-ref=refs/heads/main --include="*.txt"
|
2017-06-26 17:27:21 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_local_object "$txt_main_oid" "120"
|
2017-06-26 17:27:21 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
|
|
|
prev="$(git rev-parse refs/heads/main^1)"
|
2017-06-26 17:27:21 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
diff -u <(git cat-file -p $main:.gitattributes) <(cat <<-EOF
|
2017-06-26 17:27:21 +00:00
|
|
|
*.txt filter=lfs diff=lfs merge=lfs -text
|
|
|
|
*.other filter=lfs diff=lfs merge=lfs -text
|
|
|
|
EOF)
|
|
|
|
|
|
|
|
diff -u <(git cat-file -p $prev:.gitattributes) <(cat <<-EOF
|
|
|
|
*.txt filter=lfs diff=lfs merge=lfs -text
|
|
|
|
EOF)
|
|
|
|
)
|
|
|
|
end_test
|
2017-07-05 16:30:29 +00:00
|
|
|
|
2020-03-11 14:46:01 +00:00
|
|
|
begin_test "migrate import (--exclude with existing .gitattributes)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_local_branch_with_gitattrs
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
2020-03-11 14:46:01 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "$main:a.txt")")"
|
2020-03-11 14:46:01 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
git lfs migrate import --yes --include-ref=refs/heads/main --include="*.txt" --exclude="*.bin"
|
2020-03-11 14:46:01 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_local_object "$txt_main_oid" "120"
|
2020-03-11 14:46:01 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main="$(git rev-parse refs/heads/main)"
|
|
|
|
prev="$(git rev-parse refs/heads/main^1)"
|
2020-03-11 14:46:01 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
diff -u <(git cat-file -p $main:.gitattributes) <(cat <<-EOF
|
2020-03-11 14:46:01 +00:00
|
|
|
*.txt filter=lfs diff=lfs merge=lfs -text
|
|
|
|
*.other filter=lfs diff=lfs merge=lfs -text
|
|
|
|
*.bin !text -filter -merge -diff
|
|
|
|
EOF)
|
|
|
|
|
|
|
|
diff -u <(git cat-file -p $prev:.gitattributes) <(cat <<-EOF
|
|
|
|
*.txt filter=lfs diff=lfs merge=lfs -text
|
|
|
|
*.bin !text -filter -merge -diff
|
|
|
|
EOF)
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2019-06-25 18:48:03 +00:00
|
|
|
begin_test "migrate import (identical contents, different permissions)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
# Windows lacks POSIX permissions.
|
|
|
|
[ "$IS_WINDOWS" -eq 1 ] && exit 0
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
2020-06-29 16:18:57 +00:00
|
|
|
git checkout main
|
2019-06-25 18:48:03 +00:00
|
|
|
|
|
|
|
echo "foo" >foo.dat
|
|
|
|
git add .
|
|
|
|
git commit -m "add file"
|
|
|
|
|
|
|
|
chmod u+x foo.dat
|
|
|
|
git add .
|
|
|
|
git commit -m "make file executable"
|
|
|
|
|
|
|
|
# Verify we have executable permissions.
|
|
|
|
ls -la foo.dat | grep 'rwx'
|
|
|
|
|
|
|
|
git lfs migrate import --everything --include="*.dat"
|
|
|
|
|
|
|
|
# Verify we have executable permissions.
|
|
|
|
ls -la foo.dat | grep 'rwx'
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2020-05-13 21:48:32 +00:00
|
|
|
begin_test "migrate import (tags with same name as branches)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
2020-06-29 16:18:57 +00:00
|
|
|
git checkout main
|
2020-05-13 21:48:32 +00:00
|
|
|
|
|
|
|
contents="hello"
|
|
|
|
oid=$(calc_oid "$contents")
|
|
|
|
printf "$contents" >hello.dat
|
|
|
|
git add .
|
|
|
|
git commit -m "add file"
|
|
|
|
|
|
|
|
git branch foo
|
|
|
|
git tag foo
|
|
|
|
git tag bar
|
|
|
|
|
|
|
|
git lfs migrate import --everything --include="*.dat"
|
|
|
|
|
|
|
|
[ "$(git rev-parse refs/heads/foo)" = "$(git rev-parse refs/tags/foo)" ]
|
|
|
|
[ "$(git rev-parse refs/heads/foo)" = "$(git rev-parse refs/tags/bar)" ]
|
|
|
|
|
|
|
|
assert_pointer "refs/heads/foo" hello.dat "$oid" 5
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-07-05 16:30:29 +00:00
|
|
|
begin_test "migrate import (bare repository)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
2017-07-05 16:53:09 +00:00
|
|
|
setup_multiple_local_branches
|
2017-07-05 16:37:46 +00:00
|
|
|
make_bare
|
2017-07-05 16:30:29 +00:00
|
|
|
|
|
|
|
git lfs migrate import \
|
2020-06-29 16:18:57 +00:00
|
|
|
--include-ref=main
|
2017-07-05 16:30:29 +00:00
|
|
|
)
|
|
|
|
end_test
|
2017-08-08 16:58:19 +00:00
|
|
|
|
2017-09-13 21:11:25 +00:00
|
|
|
begin_test "migrate import (nested sub-trees, no filter)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_single_local_branch_deep_trees
|
|
|
|
|
|
|
|
oid="$(calc_oid "$(git cat-file -p :foo/bar/baz/a.txt)")"
|
|
|
|
size="$(git cat-file -p :foo/bar/baz/a.txt | wc -c | awk '{ print $1 }')"
|
|
|
|
|
|
|
|
git lfs migrate import --everything
|
|
|
|
|
|
|
|
assert_local_object "$oid" "$size"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-08-08 16:58:19 +00:00
|
|
|
begin_test "migrate import (prefix include(s))"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
2018-02-19 21:37:20 +00:00
|
|
|
includes="foo/bar/baz foo/**/baz/a.txt *.txt"
|
2017-08-08 16:58:19 +00:00
|
|
|
for include in $includes; do
|
|
|
|
setup_single_local_branch_deep_trees
|
|
|
|
|
|
|
|
oid="$(calc_oid "$(git cat-file -p :foo/bar/baz/a.txt)")"
|
|
|
|
|
|
|
|
git lfs migrate import --include="$include"
|
|
|
|
|
|
|
|
assert_local_object "$oid" 120
|
2017-08-08 20:31:28 +00:00
|
|
|
|
|
|
|
cd ..
|
2017-08-08 16:58:19 +00:00
|
|
|
done
|
|
|
|
)
|
|
|
|
end_test
|
2017-09-07 17:47:17 +00:00
|
|
|
|
|
|
|
begin_test "migrate import (--everything)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
2020-06-29 16:18:57 +00:00
|
|
|
git checkout main
|
2017-09-07 17:47:17 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
main_txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
|
|
|
|
main_md_oid="$(calc_oid "$(git cat-file -p :a.md)")"
|
2017-09-07 17:47:17 +00:00
|
|
|
feature_md_oid="$(calc_oid "$(git cat-file -p my-feature:a.md)")"
|
2020-06-29 16:18:57 +00:00
|
|
|
main_txt_size="$(git cat-file -p :a.txt | wc -c | awk '{ print $1 }')"
|
|
|
|
main_md_size="$(git cat-file -p :a.md | wc -c | awk '{ print $1 }')"
|
2017-09-07 17:47:17 +00:00
|
|
|
feature_md_size="$(git cat-file -p my-feature:a.md | wc -c | awk '{ print $1 }')"
|
|
|
|
|
|
|
|
git lfs migrate import --everything
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "main" "a.txt" "$main_txt_oid" "$main_txt_size"
|
|
|
|
assert_pointer "main" "a.md" "$main_md_oid" "$main_md_size"
|
2017-09-07 17:47:17 +00:00
|
|
|
assert_pointer "my-feature" "a.md" "$feature_md_oid" "$feature_md_size"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-11-16 23:45:30 +00:00
|
|
|
begin_test "migrate import (ambiguous reference)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
|
|
|
# Create an ambiguously named reference sharing the name as the SHA-1 of
|
|
|
|
# "HEAD".
|
2017-11-17 16:11:17 +00:00
|
|
|
sha="$(git rev-parse HEAD)"
|
2017-11-16 23:45:30 +00:00
|
|
|
git tag "$sha"
|
|
|
|
|
|
|
|
git lfs migrate import --everything
|
|
|
|
)
|
|
|
|
end_test
|
2017-09-07 17:47:17 +00:00
|
|
|
|
|
|
|
begin_test "migrate import (--everything with args)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
[ "$(git lfs migrate import --everything main 2>&1)" = \
|
2017-09-07 17:47:17 +00:00
|
|
|
"fatal: cannot use --everything with explicit reference arguments" ]
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (--everything with --include-ref)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
[ "$(git lfs migrate import --everything --include-ref=refs/heads/main 2>&1)" = \
|
2017-09-07 17:47:17 +00:00
|
|
|
"fatal: cannot use --everything with --include-ref or --exclude-ref" ]
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (--everything with --exclude-ref)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
[ "$(git lfs migrate import --everything --exclude-ref=refs/heads/main 2>&1)" = \
|
2017-09-07 17:47:17 +00:00
|
|
|
"fatal: cannot use --everything with --include-ref or --exclude-ref" ]
|
|
|
|
)
|
|
|
|
end_test
|
2017-12-20 13:11:25 +00:00
|
|
|
|
|
|
|
begin_test "migrate import (--everything and --include with glob pattern)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
md_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.md")")"
|
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
2017-12-20 13:11:25 +00:00
|
|
|
md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")"
|
|
|
|
txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")"
|
|
|
|
|
|
|
|
git lfs migrate import --verbose --everything --include='*.[mM][dD]'
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_main_oid" "140"
|
2017-12-20 13:11:25 +00:00
|
|
|
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_local_object "$md_main_oid" "140"
|
2017-12-20 13:11:25 +00:00
|
|
|
assert_local_object "$md_feature_oid" "30"
|
2020-06-29 16:18:57 +00:00
|
|
|
refute_local_object "$txt_main_oid"
|
2017-12-20 13:11:25 +00:00
|
|
|
refute_local_object "$txt_feature_oid"
|
|
|
|
)
|
|
|
|
end_test
|
2017-12-20 13:47:37 +00:00
|
|
|
|
2019-06-24 15:55:17 +00:00
|
|
|
begin_test "migrate import (--everything with tag pointing to tag)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
md_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.md")")"
|
|
|
|
txt_main_oid="$(calc_oid "$(git cat-file -p "refs/heads/main:a.txt")")"
|
2019-06-24 15:55:17 +00:00
|
|
|
md_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.md")")"
|
|
|
|
txt_feature_oid="$(calc_oid "$(git cat-file -p "refs/heads/my-feature:a.txt")")"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
git tag -a -m abc abc refs/heads/main
|
2019-06-24 15:55:17 +00:00
|
|
|
git tag -a -m def def refs/tags/abc
|
|
|
|
|
|
|
|
git lfs migrate import --verbose --everything --include='*.[mM][dD]'
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_main_oid" "140"
|
|
|
|
assert_pointer "refs/tags/abc" "a.md" "$md_main_oid" "140"
|
|
|
|
assert_pointer "refs/tags/def" "a.md" "$md_main_oid" "140"
|
2019-06-24 15:55:17 +00:00
|
|
|
assert_pointer "refs/heads/my-feature" "a.md" "$md_feature_oid" "30"
|
|
|
|
|
|
|
|
git tag --points-at refs/tags/abc | grep -q def
|
|
|
|
! git tag --points-at refs/tags/def | grep -q abc
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_local_object "$md_main_oid" "140"
|
2019-06-24 15:55:17 +00:00
|
|
|
assert_local_object "$md_feature_oid" "30"
|
2020-06-29 16:18:57 +00:00
|
|
|
refute_local_object "$txt_main_oid"
|
2019-06-24 15:55:17 +00:00
|
|
|
refute_local_object "$txt_feature_oid"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2017-12-20 13:47:37 +00:00
|
|
|
begin_test "migrate import (nested sub-trees and --include with wildcard)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_single_local_branch_deep_trees
|
|
|
|
|
|
|
|
oid="$(calc_oid "$(git cat-file -p :foo/bar/baz/a.txt)")"
|
|
|
|
size="$(git cat-file -p :foo/bar/baz/a.txt | wc -c | awk '{ print $1 }')"
|
|
|
|
|
|
|
|
git lfs migrate import --include="**/*ar/**"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "foo/bar/baz/a.txt" "$oid" "$size"
|
2017-12-20 13:47:37 +00:00
|
|
|
assert_local_object "$oid" "$size"
|
|
|
|
)
|
|
|
|
end_test
|
2017-12-20 17:21:39 +00:00
|
|
|
|
|
|
|
begin_test "migrate import (handle copies of files)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_single_local_branch_deep_trees
|
|
|
|
|
|
|
|
# add the object from the sub-tree to the root directory
|
|
|
|
cp foo/bar/baz/a.txt a.txt
|
|
|
|
git add a.txt
|
|
|
|
git commit -m "duplicated file"
|
|
|
|
|
|
|
|
oid_root="$(calc_oid "$(git cat-file -p :a.txt)")"
|
|
|
|
oid_tree="$(calc_oid "$(git cat-file -p :foo/bar/baz/a.txt)")"
|
|
|
|
size="$(git cat-file -p :foo/bar/baz/a.txt | wc -c | awk '{ print $1 }')"
|
|
|
|
|
|
|
|
# only import objects under "foo"
|
|
|
|
git lfs migrate import --include="foo/**"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "foo/bar/baz/a.txt" "$oid_tree" "$size"
|
2017-12-20 17:21:39 +00:00
|
|
|
assert_local_object "$oid_tree" "$size"
|
|
|
|
|
|
|
|
# "a.txt" is not under "foo" and therefore should not be in LFS
|
|
|
|
oid_root_after_migration="$(calc_oid "$(git cat-file -p :a.txt)")"
|
|
|
|
[ "$oid_root" = "$oid_root_after_migration" ]
|
|
|
|
)
|
|
|
|
end_test
|
2018-03-21 00:37:14 +00:00
|
|
|
|
2018-03-19 13:41:35 +00:00
|
|
|
begin_test "migrate import (--object-map)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches
|
|
|
|
|
|
|
|
output_dir=$(mktemp -d)
|
|
|
|
|
|
|
|
git log --all --pretty='format:%H' > "${output_dir}/old_sha.txt"
|
|
|
|
git lfs migrate import --everything --object-map "${output_dir}/object-map.txt"
|
|
|
|
git log --all --pretty='format:%H' > "${output_dir}/new_sha.txt"
|
|
|
|
paste -d',' "${output_dir}/old_sha.txt" "${output_dir}/new_sha.txt" > "${output_dir}/expected-map.txt"
|
|
|
|
|
2018-03-21 03:20:19 +00:00
|
|
|
diff -u <(sort "${output_dir}/expected-map.txt") <(sort "${output_dir}/object-map.txt")
|
2018-03-19 13:41:35 +00:00
|
|
|
)
|
|
|
|
end_test
|
2018-03-29 01:45:56 +00:00
|
|
|
|
2018-03-21 00:37:14 +00:00
|
|
|
begin_test "migrate import (--include with space)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_local_branch_with_space
|
|
|
|
|
|
|
|
oid="$(calc_oid "$(git cat-file -p :"a file.txt")")"
|
|
|
|
|
|
|
|
git lfs migrate import --include "a file.txt"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a file.txt" "$oid" 50
|
2018-03-21 00:37:14 +00:00
|
|
|
cat .gitattributes
|
|
|
|
if [ 1 -ne "$(grep -c "a\[\[:space:\]\]file.txt" .gitattributes)" ]; then
|
|
|
|
echo >&2 "fatal: expected \"a[[:space:]]file.txt\" to appear in .gitattributes"
|
|
|
|
echo >&2 "fatal: got"
|
|
|
|
sed -e 's/^/ /g' < .gitattributes >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
2018-04-14 09:47:20 +00:00
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (handle symbolic link)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_local_branch_with_symlink
|
|
|
|
|
|
|
|
txt_oid="$(calc_oid "$(git cat-file -p :a.txt)")"
|
|
|
|
link_oid="$(calc_oid "$(git cat-file -p :link.txt)")"
|
|
|
|
|
|
|
|
git lfs migrate import --include="*.txt"
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_oid" "120"
|
2018-04-14 09:47:20 +00:00
|
|
|
|
|
|
|
assert_local_object "$txt_oid" "120"
|
|
|
|
# "link.txt" is a symbolic link so it should be not in LFS
|
|
|
|
refute_local_object "$link_oid" "5"
|
|
|
|
)
|
2018-03-21 00:37:14 +00:00
|
|
|
end_test
|
2018-06-08 20:15:48 +00:00
|
|
|
|
|
|
|
begin_test "migrate import (commit --allow-empty)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
reponame="migrate---allow-empty"
|
|
|
|
git init "$reponame"
|
|
|
|
cd "$reponame"
|
|
|
|
|
|
|
|
git commit --allow-empty -m "initial commit"
|
|
|
|
|
|
|
|
original_head="$(git rev-parse HEAD)"
|
|
|
|
git lfs migrate import --everything
|
|
|
|
migrated_head="$(git rev-parse HEAD)"
|
|
|
|
|
|
|
|
assert_ref_unmoved "HEAD" "$original_head" "$migrated_head"
|
|
|
|
)
|
|
|
|
end_test
|
2018-06-13 19:07:19 +00:00
|
|
|
|
|
|
|
begin_test "migrate import (multiple remotes)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_remotes
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
original_main="$(git rev-parse main)"
|
2018-06-13 19:07:19 +00:00
|
|
|
|
|
|
|
git lfs migrate import
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
migrated_main="$(git rev-parse main)"
|
2018-06-13 19:07:19 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_ref_unmoved "main" "$original_main" "$migrated_main"
|
2018-06-13 19:07:19 +00:00
|
|
|
)
|
|
|
|
end_test
|
2018-07-16 22:08:24 +00:00
|
|
|
|
2021-03-26 22:39:22 +00:00
|
|
|
begin_test "migrate import (dirty copy, default negative answer)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_local_branch_with_dirty_copy
|
|
|
|
|
|
|
|
original_main="$(git rev-parse main)"
|
|
|
|
|
|
|
|
echo | git lfs migrate import --everything 2>&1 | tee migrate.log
|
|
|
|
grep "migrate: working copy must not be dirty" migrate.log
|
|
|
|
|
|
|
|
migrated_main="$(git rev-parse main)"
|
|
|
|
|
|
|
|
assert_ref_unmoved "main" "$original_main" "$migrated_main"
|
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
2018-07-16 18:17:53 +00:00
|
|
|
begin_test "migrate import (dirty copy, negative answer)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_local_branch_with_dirty_copy
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
original_main="$(git rev-parse main)"
|
2018-07-16 18:17:53 +00:00
|
|
|
|
|
|
|
echo "n" | git lfs migrate import --everything 2>&1 | tee migrate.log
|
|
|
|
grep "migrate: working copy must not be dirty" migrate.log
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
migrated_main="$(git rev-parse main)"
|
2018-07-16 18:17:53 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_ref_unmoved "main" "$original_main" "$migrated_main"
|
2018-07-16 18:17:53 +00:00
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "migrate import (dirty copy, unknown then negative answer)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_local_branch_with_dirty_copy
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
original_main="$(git rev-parse main)"
|
2018-07-16 18:17:53 +00:00
|
|
|
|
|
|
|
echo "x\nn" | git lfs migrate import --everything 2>&1 | tee migrate.log
|
|
|
|
|
|
|
|
cat migrate.log
|
|
|
|
|
|
|
|
[ "2" -eq "$(grep -o "override changes in your working copy" migrate.log \
|
|
|
|
| wc -l | awk '{ print $1 }')" ]
|
|
|
|
grep "migrate: working copy must not be dirty" migrate.log
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
migrated_main="$(git rev-parse main)"
|
2018-07-16 18:17:53 +00:00
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_ref_unmoved "main" "$original_main" "$migrated_main"
|
2018-07-16 18:17:53 +00:00
|
|
|
)
|
|
|
|
end_test
|
2018-07-16 21:53:47 +00:00
|
|
|
|
|
|
|
begin_test "migrate import (dirty copy, positive answer)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_local_branch_with_dirty_copy
|
|
|
|
|
|
|
|
oid="$(calc_oid "$(git cat-file -p :a.txt)")"
|
|
|
|
|
|
|
|
echo "y" | git lfs migrate import --everything 2>&1 | tee migrate.log
|
|
|
|
grep "migrate: changes in your working copy will be overridden ..." \
|
|
|
|
migrate.log
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$oid" "5"
|
2018-07-16 21:53:47 +00:00
|
|
|
assert_local_object "$oid" "5"
|
|
|
|
)
|
|
|
|
end_test
|
2018-07-23 14:14:29 +00:00
|
|
|
|
2018-07-16 22:08:24 +00:00
|
|
|
begin_test "migrate import (non-standard refs)"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
setup_multiple_local_branches_non_standard
|
|
|
|
|
|
|
|
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 --everything
|
|
|
|
|
2020-06-29 16:18:57 +00:00
|
|
|
assert_pointer "refs/heads/main" "a.md" "$md_oid" "140"
|
|
|
|
assert_pointer "refs/heads/main" "a.txt" "$txt_oid" "120"
|
2018-07-16 22:08:24 +00:00
|
|
|
assert_pointer "refs/pull/1/base" "a.md" "$md_oid" "140"
|
|
|
|
assert_pointer "refs/pull/1/base" "a.txt" "$txt_oid" "120"
|
|
|
|
|
|
|
|
assert_pointer "refs/heads/my-feature" "a.txt" "$txt_oid" "120"
|
|
|
|
assert_pointer "refs/pull/1/head" "a.txt" "$txt_oid" "120"
|
|
|
|
|
|
|
|
assert_local_object "$md_oid" "140"
|
|
|
|
assert_local_object "$txt_oid" "120"
|
|
|
|
assert_local_object "$md_feature_oid" "30"
|
|
|
|
)
|
|
|
|
end_test
|