git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv3] filter-branch: Add tests for submodules

From
Michal Sojka <sojkam1@fel.cvut.cz>
Date
Jan 27, 2010, 23:55 UTC
Message-ID
<1264636547-24496-1-git-send-email-sojkam1@fel.cvut.cz>
In-Reply-To
<201001280041.23182.sojkam1@fel.cvut.cz>
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@fel.cvut.cz>
---
 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
Previous: Michal SojkaNext: Junio C Hamano
Message 7 of 15 in “filter-branch fix and tests”
  1. Michal SojkaJan 25, 2010
  2. 1/2 filter-branch: Fix to allow replacing submodules with another contentMichal Sojka, Jan 25, 2010
  3. 2/2 filter-branch: Add tests for submodulesMichal Sojka, Jan 25, 2010
  4. Michal SojkaJan 27, 2010
  5. Johannes SixtJan 27, 2010
  6. Michal SojkaJan 27, 2010
  7. [PATCHv3] filter-branch: Add tests for submodulesMichal Sojka, Jan 27, 2010
  8. Junio C HamanoJan 28, 2010
  9. Michal SojkaJan 28, 2010
  10. 1/2 filter-branch: Fix to allow replacing submodules with another contentMichal Sojka, Jan 28, 2010
  11. 2/2 filter-branch: Add tests for submodules in tree-filterMichal Sojka, Jan 28, 2010
  12. Junio C HamanoJan 28, 2010
  13. Michal SojkaJan 29, 2010
  14. 1/2 filter-branch: Fix to allow replacing submodules with another contentMichal Sojka, Jan 29, 2010
  15. 2/2 filter-branch: Add tests for submodules in tree-filterMichal Sojka, Jan 29, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.