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

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

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 2, 2013, 19:18 UTC
Message-ID
<7vmwtgd9lq.fsf@alter.siamese.dyndns.org>
In-Reply-To
<515B2B6D.4050801@kdbg.org>
Johannes Sixt <j6t@kdbg.org> writes:
Show 5 quoted lines
>> 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.

Surely getline() needs to be fixed not to loop forever regardless of the binary-ness, but I was more worried about our additions of lines that satisfy is_cmarker(), counting of them in the callchain from handle_file() to handle_path() to decide if a path has already been resolved by the user, and recording of an resolution based on the return value of that callchain, all of which relies on the merged contents being textual and marked with the conflict marker.

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: Johannes SixtNext: Johannes Sixt
Message 4 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.