Add a --cover-letter option to format-patch
[debian-git.git] / t / t4014-format-patch.sh
blobac78752067ef69844fc9b171a02d151a81b56958
1 #!/bin/sh
3 # Copyright (c) 2006 Junio C Hamano
6 test_description='Format-patch skipping already incorporated patches'
8 . ./test-lib.sh
10 test_expect_success setup '
12 for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i"; done >file &&
13 cat file >elif &&
14 git add file elif &&
15 git commit -m Initial &&
16 git checkout -b side &&
18 for i in 1 2 5 6 A B C 7 8 9 10; do echo "$i"; done >file &&
19 chmod +x elif &&
20 git update-index file elif &&
21 git update-index --chmod=+x elif &&
22 git commit -m "Side changes #1" &&
24 for i in D E F; do echo "$i"; done >>file &&
25 git update-index file &&
26 git commit -m "Side changes #2" &&
27 git tag C2 &&
29 for i in 5 6 1 2 3 A 4 B C 7 8 9 10 D E F; do echo "$i"; done >file &&
30 git update-index file &&
31 git commit -m "Side changes #3 with \\n backslash-n in it." &&
33 git checkout master &&
34 git diff-tree -p C2 | git apply --index &&
35 git commit -m "Master accepts moral equivalent of #2"
39 test_expect_success "format-patch --ignore-if-in-upstream" '
41 git format-patch --stdout master..side >patch0 &&
42 cnt=`grep "^From " patch0 | wc -l` &&
43 test $cnt = 3
47 test_expect_success "format-patch --ignore-if-in-upstream" '
49 git format-patch --stdout \
50 --ignore-if-in-upstream master..side >patch1 &&
51 cnt=`grep "^From " patch1 | wc -l` &&
52 test $cnt = 2
56 test_expect_success "format-patch result applies" '
58 git checkout -b rebuild-0 master &&
59 git am -3 patch0 &&
60 cnt=`git rev-list master.. | wc -l` &&
61 test $cnt = 2
64 test_expect_success "format-patch --ignore-if-in-upstream result applies" '
66 git checkout -b rebuild-1 master &&
67 git am -3 patch1 &&
68 cnt=`git rev-list master.. | wc -l` &&
69 test $cnt = 2
72 test_expect_success 'commit did not screw up the log message' '
74 git cat-file commit side | grep "^Side .* with .* backslash-n"
78 test_expect_success 'format-patch did not screw up the log message' '
80 grep "^Subject: .*Side changes #3 with .* backslash-n" patch0 &&
81 grep "^Subject: .*Side changes #3 with .* backslash-n" patch1
85 test_expect_success 'replay did not screw up the log message' '
87 git cat-file commit rebuild-1 | grep "^Side .* with .* backslash-n"
91 test_expect_success 'multiple files' '
93 rm -rf patches/ &&
94 git checkout side &&
95 git format-patch -o patches/ master &&
96 ls patches/0001-Side-changes-1.patch patches/0002-Side-changes-2.patch patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch
99 test_expect_success 'thread' '
101 rm -rf patches/ &&
102 git checkout side &&
103 git format-patch --thread -o patches/ master &&
104 FIRST_MID=$(grep "Message-Id:" patches/0001-* | sed "s/^[^<]*\(<[^>]*>\).*$/\1/") &&
105 for i in patches/0002-* patches/0003-*
107 grep "References: $FIRST_MID" $i &&
108 grep "In-Reply-To: $FIRST_MID" $i
109 done
112 test_expect_success 'thread in-reply-to' '
114 rm -rf patches/ &&
115 git checkout side &&
116 git format-patch --in-reply-to="<test.message>" --thread -o patches/ master &&
117 FIRST_MID="<test.message>" &&
118 for i in patches/*
120 grep "References: $FIRST_MID" $i &&
121 grep "In-Reply-To: $FIRST_MID" $i
122 done
125 test_expect_success 'thread cover-letter' '
127 rm -rf patches/ &&
128 git checkout side &&
129 git format-patch --cover-letter --thread -o patches/ master &&
130 FIRST_MID=$(grep "Message-Id:" patches/0000-* | sed "s/^[^<]*\(<[^>]*>\).*$/\1/") &&
131 for i in patches/0001-* patches/0002-* patches/0003-*
133 grep "References: $FIRST_MID" $i &&
134 grep "In-Reply-To: $FIRST_MID" $i
135 done
138 test_expect_success 'thread cover-letter in-reply-to' '
140 rm -rf patches/ &&
141 git checkout side &&
142 git format-patch --cover-letter --in-reply-to="<test.message>" --thread -o patches/ master &&
143 FIRST_MID="<test.message>" &&
144 for i in patches/*
146 grep "References: $FIRST_MID" $i &&
147 grep "In-Reply-To: $FIRST_MID" $i
148 done
151 test_expect_success 'excessive subject' '
153 rm -rf patches/ &&
154 git checkout side &&
155 for i in 5 6 1 2 3 A 4 B C 7 8 9 10 D E F; do echo "$i"; done >>file &&
156 git update-index file &&
157 git commit -m "This is an excessively long subject line for a message due to the habit some projects have of not having a short, one-line subject at the start of the commit message, but rather sticking a whole paragraph right at the start as the only thing in the commit message. It had better not become the filename for the patch." &&
158 git format-patch -o patches/ master..side &&
159 ls patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch
162 test_done