Merge branch 'js/gitweb-path-info-unquote' into maint-1.7.11
[gitweb.git] / t / t7003-filter-branch.sh
index 0da13a8d6b8f75ba041a353dfc6a356c1e8bbed0..4d13e10de1f2594ab304b3a2b7b5905d75d6ff84 100755 (executable)
@@ -3,31 +3,35 @@
 test_description='git filter-branch'
 . ./test-lib.sh
 
-make_commit () {
-       lower=$(echo $1 | tr '[A-Z]' '[a-z]')
-       echo $lower > $lower
-       git add $lower
-       test_tick
-       git commit -m $1
-       git tag $1
-}
-
 test_expect_success 'setup' '
-       make_commit A
-       make_commit B
-       git checkout -b branch B
-       make_commit D
-       mkdir dir
-       make_commit dir/D
-       make_commit E
-       git checkout master
-       make_commit C
-       git checkout branch
-       git merge C
-       git tag F
-       make_commit G
-       make_commit H
-'
+       test_commit A &&
+       GIT_COMMITTER_DATE="@0 +0000" GIT_AUTHOR_DATE="@0 +0000" &&
+       test_commit --notick B &&
+       git checkout -b branch B &&
+       test_commit D &&
+       mkdir dir &&
+       test_commit dir/D &&
+       test_commit E &&
+       git checkout master &&
+       test_commit C &&
+       git checkout branch &&
+       git merge C &&
+       git tag F &&
+       test_commit G &&
+       test_commit H
+'
+# * (HEAD, branch) H
+# * G
+# *   Merge commit 'C' into branch
+# |\
+# | * (master) C
+# * | E
+# * | dir/D
+# * | D
+# |/
+# * B
+# * A
+
 
 H=$(git rev-parse H)
 
@@ -65,14 +69,14 @@ test_expect_success 'Fail if commit filter fails' '
 '
 
 test_expect_success 'rewrite, renaming a specific file' '
-       git filter-branch -f --tree-filter "mv d doh || :" HEAD
+       git filter-branch -f --tree-filter "mv D.t doh || :" HEAD
 '
 
 test_expect_success 'test that the file was renamed' '
-       test d = "$(git show HEAD:doh --)" &&
-       ! test -f d &&
+       test D = "$(git show HEAD:doh --)" &&
+       ! test -f D.t &&
        test -f doh &&
-       test d = "$(cat doh)"
+       test D = "$(cat doh)"
 '
 
 test_expect_success 'rewrite, renaming a specific directory' '
@@ -80,18 +84,18 @@ test_expect_success 'rewrite, renaming a specific directory' '
 '
 
 test_expect_success 'test that the directory was renamed' '
-       test dir/d = "$(git show HEAD:diroh/d --)" &&
+       test dir/D = "$(git show HEAD:diroh/D.t --)" &&
        ! test -d dir &&
        test -d diroh &&
        ! test -d diroh/dir &&
-       test -f diroh/d &&
-       test dir/d = "$(cat diroh/d)"
+       test -f diroh/D.t &&
+       test dir/D = "$(cat diroh/D.t)"
 '
 
 git tag oldD HEAD~4
 test_expect_success 'rewrite one branch, keeping a side branch' '
        git branch modD oldD &&
-       git filter-branch -f --tree-filter "mv b boh || :" D..modD
+       git filter-branch -f --tree-filter "mv B.t boh || :" D..modD
 '
 
 test_expect_success 'common ancestor is still common (unchanged)' '
@@ -104,13 +108,13 @@ test_expect_success 'filter subdirectory only' '
        git add subdir/new &&
        test_tick &&
        git commit -m "subdir" &&
-       echo H > a &&
+       echo H > A.t &&
        test_tick &&
-       git commit -m "not subdir" a &&
+       git commit -m "not subdir" A.t &&
        echo A > subdir/new &&
        test_tick &&
        git commit -m "again subdir" subdir/new &&
-       git rm a &&
+       git rm A.t &&
        test_tick &&
        git commit -m "again not subdir" &&
        git branch sub &&
@@ -134,7 +138,7 @@ test_expect_success 'more setup' '
        git add subdir/new &&
        test_tick &&
        git commit -m "subdir on master" subdir/new &&
-       git rm a &&
+       git rm A.t &&
        test_tick &&
        git commit -m "again subdir on master" &&
        git merge branch
@@ -143,11 +147,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) &&
@@ -282,8 +287,8 @@ test_expect_success 'Tag name filtering allows slashes in tag names' '
 
 test_expect_success 'Prune empty commits' '
        git rev-list HEAD > expect &&
-       make_commit to_remove &&
-       git filter-branch -f --index-filter "git update-index --remove to_remove" --prune-empty HEAD &&
+       test_commit to_remove &&
+       git filter-branch -f --index-filter "git update-index --remove to_remove.t" --prune-empty HEAD &&
        git rev-list HEAD > actual &&
        test_cmp expect actual
 '
@@ -306,6 +311,24 @@ test_expect_success '--remap-to-ancestor with filename filters' '
        test $orig_invariant = $(git rev-parse invariant)
 '
 
+test_expect_success 'automatic remapping to ancestor with filename filters' '
+       git checkout master &&
+       git reset --hard A &&
+       test_commit add-foo2 foo 1 &&
+       git branch moved-foo2 &&
+       test_commit add-bar2 bar a &&
+       git branch invariant2 &&
+       orig_invariant=$(git rev-parse invariant2) &&
+       git branch moved-bar2 &&
+       test_commit change-foo2 foo 2 &&
+       git filter-branch -f \
+               moved-foo2 moved-bar2 A..master \
+               -- -- foo &&
+       test $(git rev-parse moved-foo2) = $(git rev-parse moved-bar2) &&
+       test $(git rev-parse moved-foo2) = $(git rev-parse master^) &&
+       test $orig_invariant = $(git rev-parse invariant2)
+'
+
 test_expect_success 'setup submodule' '
        rm -fr ?* .git &&
        git init &&