git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git-mailinfo fixes for patch munging

From
Junio C Hamano <junkio@cox.net>
Date
Mar 30, 2007, 21:19 UTC
Message-ID
<7vmz1uzaxd.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<20070330161845.GI11029@redhat.com>
Don Zickus <dzickus@redhat.com> writes:
Show 8 quoted lines
> Don't translate the patch to UTF-8, instead preserve the data as is.  Also
> allow overwriting the primary mail headers (addresses Linus's concern).  
>
> I also revert a test case that was included in the original patch.  Now it
> makes sense why it was the way it was. :)
>
> Cheers,
> Don
Thanks.  Sign-off would have been nice.
Show 21 quoted lines
> diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c
> index d94578c..71b6457 100644
> --- a/builtin-mailinfo.c
> +++ b/builtin-mailinfo.c
> @@ -294,14 +294,14 @@ static char *header[MAX_HDR_PARSED] = {
>  	"From","Subject","Date",
>  };
>  
> -static int check_header(char *line, char **hdr_data)
> +static int check_header(char *line, char **hdr_data, int overwrite)
>  {
>  	int i;
>  
>  	/* search for the interesting parts */
>  	for (i = 0; header[i]; i++) {
>  		int len = strlen(header[i]);
> -		if (!hdr_data[i] &&
> +		if ((!hdr_data[i] || overwrite) &&
>  		    !strncasecmp(line, header[i], len) &&
>  		    line[len] == ':' && isspace(line[len + 1])) {
>  			/* Unwrap inline B and Q encoding, and optionally
This check_header is called from each multi-part boundary with
overwrite=1, so if you have two parts and you have From: or
Subject: in the multi-part header (not in-body), wouldn't they
overwrite what we already have?  That is not desired, I would
think.
For non multi-part case, what we traditionally have done is:
	* Take Subject:, Date:, and From: from RFC2822 headers
          to prime the title and authorship information.
	* The first lines of the body of the message (i.e. after
          the blank line that separates 2822 headers and the
          body) can look like the above header lines to
          override.
	* A line that does not look like an overriding in-body
          header line is the first line of the commit log
          message.  After that, nothing is taken as an
          overriding in-body header.

For a multi-part, I think we only processed the first part as the commit log message, potentially starting with the overriding in-body headers. In other words, in-body headers are what the user *types* to override what the MUA says in RFC2822 headers. As the stuff that follow the multi-part boundary (like content-type and transfer encoding) are of the MUA kind, I suspect we do not want it to override what the sender said in the earlier parts of the message.

Show 17 quoted lines
> @@ -614,6 +614,7 @@ static int find_boundary(void)
>  
>  static int handle_boundary(void)
>  {
> +	char newline[]="\n";
>  again:
>  	if (!memcmp(line+content_top->boundary_len, "--", 2)) {
>  		/* we hit an end boundary */
> @@ -628,7 +629,7 @@ again:
>  					"can't recover\n");
>  			exit(1);
>  		}
> -		handle_filter("\n");
> +		handle_filter(newline);
>  
>  		/* skip to the next boundary */
>  		if (!find_boundary())

These two hunks certainly do not hurt, but why? Is this about the constness of the first parameter to handle_filter() and its call chain?

Having said that, the result of the patch is much better.  

In fact, I couldn't "git am" this patch (the part that reverts the test vector) with the current tip of 'master' because of the breakage you are fixing with it ;-).

Now I can.  So I'd probably take this patch for now.
Previous: Don ZickusNext: Don Zickus
Message 2 of 3 in “git-mailinfo fixes for patch munging”
  1. git-mailinfo fixes for patch mungingDon Zickus, Mar 30, 2007
  2. Junio C HamanoMar 30, 2007
  3. Don ZickusMar 30, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.