diff options
author | Jeff King <peff@peff.net> | 2011-05-26 18:28:17 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-05-26 15:56:55 -0700 |
commit | 9553d2b26395d9a19bf60875784661090f607f4a (patch) | |
tree | cad3fb57c910427092eede0e9fee3f4e64c598b2 | |
parent | clean up calling conventions for pretty.c functions (diff) | |
download | tgif-9553d2b26395d9a19bf60875784661090f607f4a.tar.xz |
format-patch: preserve subject newlines with -k
In older versions of git, we used rfc822 header folding to
indicate that the original subject line had multiple lines
in it. But since a1f6baa (format-patch: wrap long header
lines, 2011-02-23), we now use header folding whenever there
is a long line.
This means that "git am" cannot trust header folding as a
sign from format-patch that newlines should be preserved.
Instead, format-patch needs to signal more explicitly that
the newlines are significant. This patch does so by
rfc2047-encoding the newlines in the subject line. No
changes are needed on the "git am" end; it already decodes
the newlines properly.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin/log.c | 1 | ||||
-rw-r--r-- | commit.h | 1 | ||||
-rw-r--r-- | log-tree.c | 1 | ||||
-rw-r--r-- | pretty.c | 3 | ||||
-rw-r--r-- | revision.h | 3 | ||||
-rwxr-xr-x | t/t4152-am-subjects.sh | 2 |
6 files changed, 8 insertions, 3 deletions
diff --git a/builtin/log.c b/builtin/log.c index 8d842cbcac..0e46e5ae95 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1131,6 +1131,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) die ("-n and -k are mutually exclusive."); if (keep_subject && subject_prefix) die ("--subject-prefix and -k are mutually exclusive."); + rev.preserve_subject = keep_subject; argc = setup_revisions(argc, argv, &rev, &s_r_opt); if (argc > 1) @@ -74,6 +74,7 @@ struct pretty_print_context int abbrev; const char *subject; const char *after_subject; + int preserve_subject; enum date_mode date_mode; int need_8bit_cte; int show_notes; diff --git a/log-tree.c b/log-tree.c index 0d8cc7af2c..0c41789356 100644 --- a/log-tree.c +++ b/log-tree.c @@ -504,6 +504,7 @@ void show_log(struct rev_info *opt) ctx.date_mode = opt->date_mode; ctx.abbrev = opt->diffopt.abbrev; ctx.after_subject = extra_headers; + ctx.preserve_subject = opt->preserve_subject; ctx.reflog_info = opt->reflog_info; ctx.fmt = opt->commit_format; pretty_print_commit(&ctx, commit, &msgbuf); @@ -1131,7 +1131,8 @@ void pp_title_line(const struct pretty_print_context *pp, struct strbuf title; strbuf_init(&title, 80); - *msg_p = format_subject(&title, *msg_p, " "); + *msg_p = format_subject(&title, *msg_p, + pp->preserve_subject ? "\n" : " "); strbuf_grow(sb, title.len + 1024); if (pp->subject) { diff --git a/revision.h b/revision.h index 05659c64ac..f8ddd83e79 100644 --- a/revision.h +++ b/revision.h @@ -90,7 +90,8 @@ struct rev_info { abbrev_commit:1, use_terminator:1, missing_newline:1, - date_mode_explicit:1; + date_mode_explicit:1, + preserve_subject:1; unsigned int disable_stdin:1; enum date_mode date_mode; diff --git a/t/t4152-am-subjects.sh b/t/t4152-am-subjects.sh index 37e5c0361c..4c68245aca 100755 --- a/t/t4152-am-subjects.sh +++ b/t/t4152-am-subjects.sh @@ -70,7 +70,7 @@ test_expect_success 'multiline subject unwrapped (format-patch -k | am)' ' check_subject multiline-k ' echo "$MULTILINE_SUBJECT" >expect -test_expect_failure 'multiline subject preserved (format-patch -k | am -k)' ' +test_expect_success 'multiline subject preserved (format-patch -k | am -k)' ' check_subject multiline-k -k ' |