Skip to content

Commit

Permalink
format-patch: preserve subject newlines with -k
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jeff King authored and Junio C Hamano committed May 26, 2011
1 parent 6bf1394 commit 9553d2b
Show file tree
Hide file tree
Showing 6 changed files with 8 additions and 3 deletions.
1 change: 1 addition & 0 deletions builtin/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions commit.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions log-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 2 additions & 1 deletion pretty.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
3 changes: 2 additions & 1 deletion revision.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion t/t4152-am-subjects.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
'

Expand Down

0 comments on commit 9553d2b

Please sign in to comment.