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

[PATCH] Fixed Cygwin CR-munging problem in mailsplit

From
SZSalikh Zakirov <salikh.zakirov@intel.com>
Date
May 27, 2006, 17:57 UTC
Message-ID
<44789309.1030002@Intel.com>
In-Reply-To
<7virnsk6fe.fsf@assigned-by-dhcp.cox.net>

Do not open mailbox file as fopen(..., "rt") as this strips CR characters from the diff, thus breaking the patch context for changes in CRLF files.

Signed-off-by: Salikh Zakirov <Salikh.Zakirov@Intel.com>
---
Junio C Hamano wrote:
Show 11 quoted lines
> 
> 	git init-db
> 	echo 'abc@' | tr '[@]' '[\015]' >a
>         git add a
>         git commit -m initial
> 	echo 'def@' | tr '[@]' '[\015]' >>a
>         git commit -a -m second
>         git format-patch HEAD^
> 	git reset --hard HEAD^
>         git am 0*.txt
> 

This reproduction scenario results in exactly the same problem. The problem is observed on Cygwin. My initial evaluation of the problem turned out to be completely bogus.

I've tracked the problem down to the fopen(file, "rt") in mailsplit.c, which then truncates the CR character from the patch file. This changes the patch context lines and it no longer applies. Changing it to fopen(file, "r") fixes the problem.

Show 5 quoted lines
> Having said that, CRLF is unsafe for E-mail transfers anyway, so
> I think we would need a special option to tell git-apply that it
> should match '\n' that appears in the patch with '\r\n' in the
> file being patched.  But I do not think that has anything to do
> with the breakage you saw in your reproduction recipe.

My use case does not involve e-mail transfers at all. I'm using git-format-patch and git-am to rewrite the patch sequence with different commit messages.

Unfortunately, some of my fellow developers are not quite careful, and occasionally some of the source files acquire CR characters, sometimes in several lines only.

fd405a0843f3efd474bc7897b06d813d6498fbf4
 mailsplit.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
fd405a0843f3efd474bc7897b06d813d6498fbf4
diff --git mailsplit.c mailsplit.c
index c529e2d..70a569c 100644
--- mailsplit.c
+++ mailsplit.c
@@ -162,7 +162,7 @@ int main(int argc, const char **argv)
 
 	while (*argp) {
 		const char *file = *argp++;
-		FILE *f = !strcmp(file, "-") ? stdin : fopen(file, "rt");
+		FILE *f = !strcmp(file, "-") ? stdin : fopen(file, "r");
 		int file_done = 0;
 
 		if ( !f )
-- 
1.3.3.gfd40
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 5 in “git-apply can't apply patches to CRLF-files”
  1. Salikh ZakirovMay 26, 2006
  2. Junio C HamanoMay 26, 2006
  3. Fixed Cygwin CR-munging problem in mailsplitSalikh Zakirov, May 27, 2006
  4. Junio C HamanoMay 27, 2006
  5. Junio C HamanoMay 27, 2006

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.