There are three important tests: 1) 'rewrite submodule with another content' passes only with the previous patch applied. 2) 'checkout submodule during rewrite' demonstrates that it is not possible to replace a submodule revision in tree-filter by checking the submodule out and reseting the submodule's HEAD. Fails both with and without the previous patch. This is because filter-branch sets GIT_WORKING_TREE to "." which causes clone (called from git-submodule) to fail. 3) 'replace submodule revision' shows that replacing submodule revision is possible by direct index manipulation. Succeeds both with and without the previous patch. Signed-off-by: Michal Sojka <sojkam1@xxxxxxxxxxx> --- t/t7003-filter-branch.sh | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 47 insertions(+), 0 deletions(-) diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh index 9503875..fabe038 100755 --- a/t/t7003-filter-branch.sh +++ b/t/t7003-filter-branch.sh @@ -306,4 +306,51 @@ test_expect_success '--remap-to-ancestor with filename filters' ' test $orig_invariant = $(git rev-parse invariant) ' +test_expect_success 'setup submodule' ' + rm -rf * .* + git init && + test_commit file && + mkdir submod && + submodurl="$PWD/submod" + ( cd submod && + git init && + test_commit file-in-submod ) && + git submodule add "$submodurl" + git commit -m "added submodule" && + test_commit add-file && + ( cd submod && test_commit add-in-submodule ) && + git add submod && + git commit -m "changed submodule" && + git branch original HEAD +' + +orig_head=`git show-ref --hash --head HEAD` + +test_expect_success 'rewrite submodule with another content' ' + git filter-branch --tree-filter "test -d submod && { + rm -rf submod && + git rm -rf --quiet submod && + mkdir submod && + : > submod/file + } || :" HEAD && + test $orig_head != `git show-ref --hash --head HEAD` +' + +test_expect_failure 'checkout submodule during rewrite' ' + git reset --hard original && + git filter-branch -f --tree-filter \ + "git submodule update --init && + ( test -d submod && cd submod && + git reset --hard origin/master )" HEAD +' + +test_expect_success 'replace submodule revision' ' + git reset --hard original && + git filter-branch -f --tree-filter \ + "if git ls-files --error-unmatch -- submod > /dev/null 2>&1 + then git update-index --cacheinfo 160000 0123456789012345678901234567890123456789 submod + fi" HEAD && + test $orig_head != `git show-ref --hash --head HEAD` +' + test_done -- 1.6.6 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html