From: Johannes Sixt <j6t@kdbg.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: [PATCH] rerere forget: grok files containing NUL
Date: Tue, 02 Apr 2013 21:03:09 +0200 [thread overview]
Message-ID: <515B2B6D.4050801@kdbg.org> (raw)
In-Reply-To: <7vhajpj294.fsf@alter.siamese.dyndns.org>
Am 02.04.2013 00:48, schrieb Junio C Hamano:
> 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.
>> 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);
next prev parent reply other threads:[~2013-04-02 19:03 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-01 21:36 [PATCH] rerere forget: grok files containing NUL Johannes Sixt
2013-04-01 22:48 ` Junio C Hamano
2013-04-02 19:03 ` Johannes Sixt [this message]
2013-04-02 19:18 ` Junio C Hamano
2013-04-02 19:34 ` Johannes Sixt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=515B2B6D.4050801@kdbg.org \
--to=j6t@kdbg.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.