reflog: fix overriding of command line options
[gitweb.git] / t / t4014-format-patch.sh
index 843ef7f88c3025ebe0660a645024fcf0942386bd..027c13d52cd701ba28e3c5e29c5431acfccdad73 100755 (executable)
@@ -6,30 +6,36 @@
 test_description='various format-patch tests'
 
 . ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-terminal.sh
 
 test_expect_success setup '
 
        for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i"; done >file &&
        cat file >elif &&
        git add file elif &&
+       test_tick &&
        git commit -m Initial &&
        git checkout -b side &&
 
        for i in 1 2 5 6 A B C 7 8 9 10; do echo "$i"; done >file &&
        test_chmod +x elif &&
+       test_tick &&
        git commit -m "Side changes #1" &&
 
        for i in D E F; do echo "$i"; done >>file &&
        git update-index file &&
+       test_tick &&
        git commit -m "Side changes #2" &&
        git tag C2 &&
 
        for i in 5 6 1 2 3 A 4 B C 7 8 9 10 D E F; do echo "$i"; done >file &&
        git update-index file &&
+       test_tick &&
        git commit -m "Side changes #3 with \\n backslash-n in it." &&
 
        git checkout master &&
        git diff-tree -p C2 | git apply --index &&
+       test_tick &&
        git commit -m "Master accepts moral equivalent of #2"
 
 '
@@ -51,6 +57,22 @@ test_expect_success "format-patch --ignore-if-in-upstream" '
 
 '
 
+test_expect_success "format-patch doesn't consider merge commits" '
+
+       git checkout -b slave master &&
+       echo "Another line" >>file &&
+       test_tick &&
+       git commit -am "Slave change #1" &&
+       echo "Yet another line" >>file &&
+       test_tick &&
+       git commit -am "Slave change #2" &&
+       git checkout -b merger master &&
+       test_tick &&
+       git merge --no-ff slave &&
+       cnt=`git format-patch -3 --stdout | grep "^From " | wc -l` &&
+       test $cnt = 3
+'
+
 test_expect_success "format-patch result applies" '
 
        git checkout -b rebuild-0 master &&
@@ -143,6 +165,58 @@ test_expect_success 'configuration headers and command line headers' '
        grep "^ *S. E. Cipient <scipient@example.com>\$" patch7
 '
 
+test_expect_success 'command line To: header' '
+
+       git config --unset-all format.headers &&
+       git format-patch --to="R. E. Cipient <rcipient@example.com>" --stdout master..side | sed -e "/^\$/q" >patch8 &&
+       grep "^To: R. E. Cipient <rcipient@example.com>\$" patch8
+'
+
+test_expect_success 'configuration To: header' '
+
+       git config format.to "R. E. Cipient <rcipient@example.com>" &&
+       git format-patch --stdout master..side | sed -e "/^\$/q" >patch9 &&
+       grep "^To: R. E. Cipient <rcipient@example.com>\$" patch9
+'
+
+test_expect_success '--no-to overrides config.to' '
+
+       git config --replace-all format.to \
+               "R. E. Cipient <rcipient@example.com>" &&
+       git format-patch --no-to --stdout master..side |
+       sed -e "/^\$/q" >patch10 &&
+       ! grep "^To: R. E. Cipient <rcipient@example.com>\$" patch10
+'
+
+test_expect_success '--no-to and --to replaces config.to' '
+
+       git config --replace-all format.to \
+               "Someone <someone@out.there>" &&
+       git format-patch --no-to --to="Someone Else <else@out.there>" \
+               --stdout master..side |
+       sed -e "/^\$/q" >patch11 &&
+       ! grep "^To: Someone <someone@out.there>\$" patch11 &&
+       grep "^To: Someone Else <else@out.there>\$" patch11
+'
+
+test_expect_success '--no-cc overrides config.cc' '
+
+       git config --replace-all format.cc \
+               "C. E. Cipient <rcipient@example.com>" &&
+       git format-patch --no-cc --stdout master..side |
+       sed -e "/^\$/q" >patch12 &&
+       ! grep "^Cc: C. E. Cipient <rcipient@example.com>\$" patch12
+'
+
+test_expect_success '--no-add-headers overrides config.headers' '
+
+       git config --replace-all format.headers \
+               "Header1: B. E. Cipient <rcipient@example.com>" &&
+       git format-patch --no-add-headers --stdout master..side |
+       sed -e "/^\$/q" >patch13 &&
+       ! grep "^Header1: B. E. Cipient <rcipient@example.com>\$" patch13
+'
+
 test_expect_success 'multiple files' '
 
        rm -rf patches/ &&
@@ -561,4 +635,78 @@ test_expect_success 'format-patch --ignore-if-in-upstream HEAD' '
        git format-patch --ignore-if-in-upstream HEAD
 '
 
+test_expect_success 'format-patch --signature' '
+       git format-patch --stdout --signature="my sig" -1 >output &&
+       grep "my sig" output
+'
+
+test_expect_success 'format-patch with format.signature config' '
+       git config format.signature "config sig" &&
+       git format-patch --stdout -1 >output &&
+       grep "config sig" output
+'
+
+test_expect_success 'format-patch --signature overrides format.signature' '
+       git config format.signature "config sig" &&
+       git format-patch --stdout --signature="overrides" -1 >output &&
+       ! grep "config sig" output &&
+       grep "overrides" output
+'
+
+test_expect_success 'format-patch --no-signature ignores format.signature' '
+       git config format.signature "config sig" &&
+       git format-patch --stdout --signature="my sig" --no-signature \
+               -1 >output &&
+       ! grep "config sig" output &&
+       ! grep "my sig" output &&
+       ! grep "^-- \$" output
+'
+
+test_expect_success 'format-patch --signature --cover-letter' '
+       git config --unset-all format.signature &&
+       git format-patch --stdout --signature="my sig" --cover-letter \
+               -1 >output &&
+       grep "my sig" output &&
+       test 2 = $(grep "my sig" output | wc -l)
+'
+
+test_expect_success 'format.signature="" supresses signatures' '
+       git config format.signature "" &&
+       git format-patch --stdout -1 >output &&
+       ! grep "^-- \$" output
+'
+
+test_expect_success 'format-patch --no-signature supresses signatures' '
+       git config --unset-all format.signature &&
+       git format-patch --stdout --no-signature -1 >output &&
+       ! grep "^-- \$" output
+'
+
+test_expect_success 'format-patch --signature="" supresses signatures' '
+       git format-patch --signature="" -1 >output &&
+       ! grep "^-- \$" output
+'
+
+test_expect_success TTY 'format-patch --stdout paginates' '
+       rm -f pager_used &&
+       (
+               GIT_PAGER="wc >pager_used" &&
+               export GIT_PAGER &&
+               test_terminal git format-patch --stdout --all
+       ) &&
+       test_path_is_file pager_used
+'
+
+ test_expect_success TTY 'format-patch --stdout pagination can be disabled' '
+       rm -f pager_used &&
+       (
+               GIT_PAGER="wc >pager_used" &&
+               export GIT_PAGER &&
+               test_terminal git --no-pager format-patch --stdout --all &&
+               test_terminal git -c "pager.format-patch=false" format-patch --stdout --all
+       ) &&
+       test_path_is_missing pager_used &&
+       test_path_is_missing .git/pager_used
+'
+
 test_done