Code

filter-branch: add a test for the commit removal example
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Tue, 3 Jul 2007 16:50:19 +0000 (17:50 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 4 Jul 2007 04:44:16 +0000 (21:44 -0700)
In the man page, there is an example which describes how to remove
single commits (although it keeps the changes which were not reverted
in the next non-removed commit). Better make sure that it works as
expected.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7003-filter-branch.sh

index 21f9bc5dd6329eba4a623bce66fc5669628de2dc..451ac861af21fb74bbb1c52dff23c359bfb1844a 100755 (executable)
@@ -107,4 +107,39 @@ test_expect_success 'use index-filter to move into a subdirectory' '
                  mv \$GIT_INDEX_FILE.new \$GIT_INDEX_FILE" directorymoved &&
        test -z "$(git diff HEAD directorymoved:newsubdir)"'
 
+test_expect_success 'author information is preserved' '
+       : > i &&
+       git add i &&
+       test_tick &&
+       GIT_AUTHOR_NAME="B V Uips" git commit -m bvuips &&
+       git-filter-branch --msg-filter "cat; \
+                       test \$GIT_COMMIT = $(git rev-parse master) && \
+                       echo Hallo" \
+               preserved-author &&
+       test 1 = $(git rev-list --author="B V Uips" preserved-author | wc -l)
+'
+
+test_expect_success "remove a certain author's commits" '
+       echo i > i &&
+       test_tick &&
+       git commit -m i i &&
+       git-filter-branch --commit-filter "\
+               if [ \"\$GIT_AUTHOR_NAME\" = \"B V Uips\" ];\
+               then\
+                       shift;\
+                       while [ -n \"\$1\" ];\
+                       do\
+                               shift;\
+                               echo \"\$1\";\
+                               shift;\
+                       done;\
+               else\
+                       git commit-tree \"\$@\";\
+               fi" removed-author &&
+       cnt1=$(git rev-list master | wc -l) &&
+       cnt2=$(git rev-list removed-author | wc -l) &&
+       test $cnt1 -eq $(($cnt2 + 1)) &&
+       test 0 = $(git rev-list --author="B V Uips" removed-author | wc -l)
+'
+
 test_done