Skip to content

Commit 00ebc97

Browse files
peffgitster
authored andcommitted
t: test subject handling in format-patch / am pipeline
Commit a1f6baa (format-patch: wrap long header lines, 2011-02-23) changed format-patch's behavior with respect to long header lines, but made no accompanying changes to the receiving side. It was thought that "git am" would handle these folded subjects fine, but there is a regression when using "am -k". Let's add a test documenting this. While we're at it, let's give more complete test coverage to document what should be happening in each case. We test three types of subjects: a short one, one long enough to require wrapping, and a multiline subject. For each, we test these three combinations: format-patch | am format-patch -k | am format-patch -k | am -k We don't bother testing "format-patch | am -k", which is nonsense (you will be adding in [PATCH] cruft to each subject). This reveals the regression above (long subjects have linebreaks introduced via "format-patch -k | am -k"), as well as an existing non-optimal behavior (multiline subjects are not preserved using "-k"). Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 990f6e3 commit 00ebc97

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

t/t4152-am-subjects.sh

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#!/bin/sh
2+
3+
test_description='test subject preservation with format-patch | am'
4+
. ./test-lib.sh
5+
6+
make_patches() {
7+
type=$1
8+
subject=$2
9+
test_expect_success "create patches with $type subject" '
10+
git reset --hard baseline &&
11+
echo $type >file &&
12+
git commit -a -m "$subject" &&
13+
git format-patch -1 --stdout >$type.patch &&
14+
git format-patch -1 --stdout -k >$type-k.patch
15+
'
16+
}
17+
18+
check_subject() {
19+
git reset --hard baseline &&
20+
git am $2 $1.patch &&
21+
git log -1 --pretty=format:%B >actual &&
22+
test_cmp expect actual
23+
}
24+
25+
test_expect_success 'setup baseline commit' '
26+
test_commit baseline file
27+
'
28+
29+
SHORT_SUBJECT='short subject'
30+
make_patches short "$SHORT_SUBJECT"
31+
32+
LONG_SUBJECT1='this is a long subject that is virtually guaranteed'
33+
LONG_SUBJECT2='to require wrapping via format-patch if it is all'
34+
LONG_SUBJECT3='going to appear on a single line'
35+
LONG_SUBJECT="$LONG_SUBJECT1 $LONG_SUBJECT2 $LONG_SUBJECT3"
36+
make_patches long "$LONG_SUBJECT"
37+
38+
MULTILINE_SUBJECT="$LONG_SUBJECT1
39+
$LONG_SUBJECT2
40+
$LONG_SUBJECT3"
41+
make_patches multiline "$MULTILINE_SUBJECT"
42+
43+
echo "$SHORT_SUBJECT" >expect
44+
test_expect_success 'short subject preserved (format-patch | am)' '
45+
check_subject short
46+
'
47+
test_expect_success 'short subject preserved (format-patch -k | am)' '
48+
check_subject short-k
49+
'
50+
test_expect_success 'short subject preserved (format-patch -k | am -k)' '
51+
check_subject short-k -k
52+
'
53+
54+
echo "$LONG_SUBJECT" >expect
55+
test_expect_success 'long subject preserved (format-patch | am)' '
56+
check_subject long
57+
'
58+
test_expect_success 'long subject preserved (format-patch -k | am)' '
59+
check_subject long-k
60+
'
61+
test_expect_failure 'long subject preserved (format-patch -k | am -k)' '
62+
check_subject long-k -k
63+
'
64+
65+
echo "$LONG_SUBJECT" >expect
66+
test_expect_success 'multiline subject unwrapped (format-patch | am)' '
67+
check_subject multiline
68+
'
69+
test_expect_success 'multiline subject unwrapped (format-patch -k | am)' '
70+
check_subject multiline-k
71+
'
72+
echo "$MULTILINE_SUBJECT" >expect
73+
test_expect_failure 'multiline subject preserved (format-patch -k | am -k)' '
74+
check_subject multiline-k -k
75+
'
76+
77+
test_done

0 commit comments

Comments
 (0)