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

Re: [PATCH] rerere forget: grok files containing NUL

From
Johannes Sixt <j6t@kdbg.org>
Date
Apr 2, 2013, 19:03 UTC
Message-ID
<515B2B6D.4050801@kdbg.org>
In-Reply-To
<7vhajpj294.fsf@alter.siamese.dyndns.org>
Am 02.04.2013 00:48, schrieb Junio C Hamano:
Show 11 quoted lines
> Johannes Sixt <j6t@kdbg.org> writes:
> 
>> Using 'git rerere forget .' after a merge that involved binary files
>> runs into an infinite loop if the binary file contains a zero byte.
>> Replace a strchrnul by memchr because the former does not make progress
>> as soon as the NUL is encountered.
> 
> Hmph, thanks.
> 
> Is it the right behaviour for rerere to even attempt to interfere
> with a merge that involves binary files in the first place?

Why not? And how could rerere tell the difference? It would have to do the same check for binary-ness as the merge driver before it even starts looking closer at the files.

> Does the three-way merge machinery replay recorded resolution for
> such a binary file correctly (after your fix, that is)?

Yes, it does. It recognizes the binary-ness and picks 'our' side. Only then comes rerere_mem_getline into play.

Show 17 quoted lines
>> diff --git a/rerere.c b/rerere.c
>> index a6a5cd5..4d940cd 100644
>> --- a/rerere.c
>> +++ b/rerere.c
>> @@ -284,8 +284,10 @@ static int rerere_mem_getline(struct strbuf *sb, struct rerere_io *io_)
>>  	strbuf_release(sb);
>>  	if (!io->input.len)
>>  		return -1;
>> -	ep = strchrnul(io->input.buf, '\n');
>> -	if (*ep == '\n')
>> +	ep = memchr(io->input.buf, '\n', io->input.len);
>> +	if (!ep)
>> +		ep = io->input.buf + io->input.len;
>> +	else if (*ep == '\n')
>>  		ep++;
>>  	len = ep - io->input.buf;
>>  	strbuf_add(sb, io->input.buf, len);
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 5 in “rerere forget: grok files containing NUL”
  1. rerere forget: grok files containing NULJohannes Sixt, Apr 1, 2013
  2. Junio C HamanoApr 1, 2013
  3. Johannes SixtApr 2, 2013
  4. Junio C HamanoApr 2, 2013
  5. Johannes SixtApr 2, 2013

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.