2011/2/23 Junio C Hamano [off-list ref]:
xzer [off-list ref] writes:
quoted
Subject: Re: [PATCH] generate a valid rfc2047 mail header for multi-line subject.
We prefer to have "[PATCH] subsystem: description without final full-stop" here.
quoted
There is still a problem that git-am will lost the line break.
What does "still" refer to? It is unclear under what condition the
command lose "the line break" (nor which line break you are refering to; I
am guessing that you have a commit that begins with a multi-line paragraph
and you are talking about line breaks between the lines in the first
paragraph).
Yes, that is what I am refering, the line breaks in the first paragraph.
quoted
It's not easy to retain it, but as the first step, we can generate
a valid rfc2047 header now.
Please describe what is broken (iow, "Given this sample input, we
currently generate this output, which is not a valid rfc2047") and what
the new output looks like ("Update pp_title_line() to generate this output
instead.")
At present we can only concatenate the lines in the first paragraph so
that we can generate a valid rfc2047 mail, but we will lost the line breaks
after import the patch by git-am.
quoted
---
Missing sign-off with a real name.
I am sorry that I didn't find the document of submitting a patch until
yesterday, Thanks for your comment.
quoted
diff --git a/pretty.c b/pretty.c
index 8549934..f18a38d 100644
--- a/pretty.c
+++ b/pretty.c
@@ -249,6 +249,33 @@ needquote:
strbuf_addstr(sb, "?=");
}
+static void add_rfc2047_multiline(struct strbuf *sb, const char *line, int len,
+ const char *encoding)
+{
+ int first = 1;
+ char *mline = xmemdupz(line, len);
+ const char *cline = mline;
+ int offset = 0, linelen = 0;
+ for (;;) {
You seem to have indent that uses SPs instead of HT around here...
quoted
+ linelen = get_one_line(cline);
I can see you are trying to be careful not to let get_one_line() overstep
past "len" the caller gave you by making a copy first, but is this
overhead really necessary? After all we know in this static function that
the caller is feeding the contents from a strbuf, which always have a
terminating NUL (and that is why it is Ok that get_one_line() is not a
counted string interface).
I am not sure that who will call this function in future, I think since there is
a argument as len, so I'd better to obey the function declare.
quoted
+
+ cline += linelen;
+
+ if (!linelen)
+ break;
+
+ if (!first)
+ strbuf_addf(sb, "\n ");
+
+ offset = *(cline -1) == '\n';
+
+ add_rfc2047(sb, cline-linelen, linelen-offset, encoding);
+ first = 0;
+
+ }
+ free(mline);
+}
So the general idea of this change (I am thinking aloud what should be in
the updated commit log message as the problem description) is that:
- We currently give an entire multi-line paragraph string to the
add_rfc2047() function to be formatted as the title of the commit;
- The add_rfc2047() functionjust passes "\n" through, without making it a
folding whitespace followed by a newline, to help callers that want to
use this function to produce a header line that is rfc 2822 conformant;
- The patch introduces a new function add_rfc2047_multiline() that splits
its input and performs line folding for such a caller (namely, the
pp_title_line() function);
- Another caller of add_rfc2047(), pp_user_info, is not changed, and it
won't fold the name of the user that appear on the From: line.
It is unclear if the last point is really the right thing to do, though.
It is not a new problem that an author name that has a "\n" in it would
break the output, but we probably would want to fix that case too here?
Your comment is just right for what I tried to do, I explained why I add a new
function for subject specially in the mail which replied to Jeff, I
want to remain
the line breaks after import the patch, so I think I need do something here
in future, it will be compatible with rfc2047 and also can be imported with
line breaks correctly. I don't know how yet, so I just want to left a
possibility.
So I introduce a new function for subject only.
xzer