Skip to content

Commit 4deca32

Browse files
committed
Merge branch 'jk/maint-commit-v-strip' into jk/commit-v-strip
* jk/maint-commit-v-strip: commit: Fix stripping of patch in verbose mode.
2 parents c1e255b + 0b38227 commit 4deca32

File tree

2 files changed

+78
-3
lines changed

2 files changed

+78
-3
lines changed

builtin-commit.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,9 +1015,11 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
10151015
}
10161016

10171017
/* Truncate the message just before the diff, if any. */
1018-
p = strstr(sb.buf, "\ndiff --git a/");
1019-
if (p != NULL)
1020-
strbuf_setlen(&sb, p - sb.buf + 1);
1018+
if (verbose) {
1019+
p = strstr(sb.buf, "\ndiff --git ");
1020+
if (p != NULL)
1021+
strbuf_setlen(&sb, p - sb.buf + 1);
1022+
}
10211023

10221024
if (cleanup_mode != CLEANUP_NONE)
10231025
stripspace(&sb, cleanup_mode == CLEANUP_ALL);

t/t7507-commit-verbose.sh

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#!/bin/sh
2+
3+
test_description='verbose commit template'
4+
. ./test-lib.sh
5+
6+
cat >check-for-diff <<EOF
7+
#!$SHELL_PATH
8+
exec grep '^diff --git' "\$1"
9+
EOF
10+
chmod +x check-for-diff
11+
test_set_editor "$PWD/check-for-diff"
12+
13+
cat >message <<'EOF'
14+
subject
15+
16+
body
17+
EOF
18+
19+
test_expect_success 'setup' '
20+
echo content >file &&
21+
git add file &&
22+
git commit -F message
23+
'
24+
25+
test_expect_failure 'initial commit shows verbose diff' '
26+
git commit --amend -v
27+
'
28+
29+
test_expect_success 'second commit' '
30+
echo content modified >file &&
31+
git add file &&
32+
git commit -F message
33+
'
34+
35+
check_message() {
36+
git log -1 --pretty=format:%s%n%n%b >actual &&
37+
test_cmp "$1" actual
38+
}
39+
40+
test_expect_success 'verbose diff is stripped out' '
41+
git commit --amend -v &&
42+
check_message message
43+
'
44+
45+
test_expect_success 'verbose diff is stripped out (mnemonicprefix)' '
46+
git config diff.mnemonicprefix true &&
47+
git commit --amend -v &&
48+
check_message message
49+
'
50+
51+
cat >diff <<'EOF'
52+
This is an example commit message that contains a diff.
53+
54+
diff --git c/file i/file
55+
new file mode 100644
56+
index 0000000..f95c11d
57+
--- /dev/null
58+
+++ i/file
59+
@@ -0,0 +1 @@
60+
+this is some content
61+
EOF
62+
63+
test_expect_success 'diff in message is retained without -v' '
64+
git commit --amend -F diff &&
65+
check_message diff
66+
'
67+
68+
test_expect_failure 'diff in message is retained with -v' '
69+
git commit --amend -F diff -v &&
70+
check_message diff
71+
'
72+
73+
test_done

0 commit comments

Comments
 (0)