merge-recursive: D/F conflicts where was_a_dir/file -> was_a_dir
[gitweb.git] / t / t7003-filter-branch.sh
index 9503875e97e09ad94283e63ae298551453e5787a..2c55801ee8b88b2d97968a24706dcfdab824668b 100755 (executable)
@@ -143,11 +143,12 @@ test_expect_success 'more setup' '
 test_expect_success 'use index-filter to move into a subdirectory' '
        git branch directorymoved &&
        git filter-branch -f --index-filter \
-                "git ls-files -s | sed \"s-\\t-&newsubdir/-\" |
+                "git ls-files -s | sed \"s-    -&newsubdir/-\" |
                  GIT_INDEX_FILE=\$GIT_INDEX_FILE.new \
                        git update-index --index-info &&
                  mv \"\$GIT_INDEX_FILE.new\" \"\$GIT_INDEX_FILE\"" directorymoved &&
-       test -z "$(git diff HEAD directorymoved:newsubdir)"'
+       git diff --exit-code HEAD directorymoved:newsubdir
+'
 
 test_expect_success 'stops when msg filter fails' '
        old=$(git rev-parse HEAD) &&
@@ -306,4 +307,43 @@ test_expect_success '--remap-to-ancestor with filename filters' '
        test $orig_invariant = $(git rev-parse invariant)
 '
 
+test_expect_success 'setup submodule' '
+       rm -fr ?* .git &&
+       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_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