From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, "Beat Bolli" <dev+git@drbeat.li>,
"Jeff King" <peff@peff.org>,
"Eric Sunshine" <sunshine@sunshineco.com>,
"Torsten Bögershausen" <tboegi@web.de>
Subject: Re: [PATCH v2 0/1] Let merge-file write out conflict markers with correct EOLs
Date: Mon, 25 Jan 2016 08:25:48 +0100 (CET) [thread overview]
Message-ID: <alpine.DEB.2.20.1601250802240.2964@virtualbox> (raw)
In-Reply-To: <xmqq4me2d402.fsf@gitster.mtv.corp.google.com>
Hi Junio,
On Sun, 24 Jan 2016, Junio C Hamano wrote:
> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>
> > The crucial idea hit me yesterday when I took a step back: all
> > we need to do is to ensure that the end-of-line style is matched
> > when *all* input files are LF-only, or when they are all CR/LF.
> > In all other cases, we have mixed line endings anyway.
> >
> > And to do that, it is sufficient to look at *one single line
> > ending* in the context. Technically, it does not even have to be
> > the context, but the first line endings of the first file would
> > be enough, however it is so much more pleasant if the conflict
> > marker's eol matches the one of the preceding line.
>
> I like that approach. My understanding of the xdiff/xmerge code is
> very rusty and I have some time to re-learn it before I can judge
> that the change implements that approach correctly, though X-<.
I hear ya. The xmerge code is my fault, too, and it did not help that I
imitated the lack of documentation of the surrounding code.
But it all came back to me when I looked at the code. Hopefully these
hints are helpful:
- xe1 and xe2 refer to "xdfenv_t" types that essentially hold pointers to
one pre-image and one post-image, each
- The pre-images of xe1 and xe2 are identical, of course, because we are
looking at a three-way merge
- The xdfenv_t type refers to the pre-image as xdf1 and to the post-image
as xdf2, both of the type "xdfile_t"
- The xdfile_t structure contains the pointers to a parsed file. The lines
are called "recs" (record) here
- Each record has a pointed to the start of the line and a size that
includes the newline byte, if any
- The record parsing hard-codes 0x0a as newline (NEWLINEBYTES), which is
used in the xdl_hash_record() function that is called from the
xdl_prepare_ctx() function that parses each input file, and which in
turn is called from the xdl_prepare_env() function that prepares a
pair of files for diff'ing by the xdl_do_diff() function that in turn
is called twice from xdl_merge() to diff orig->a and orig->b
- Imitating libdiff's existing code, "i" is used to refer to a specific
line; it is the line number decremented by one, i.e. 0 <= i < nrec
(where "nrec" is the field of the xdfile_t structure indicating the
line count)
You know, cobbling these notes together had an unexpected side effect: I
realized that another patch is needed to properly support CR/LF files:
when the conflict hunk is at the end of one file and said file has no
trailing line ending, we add \n always, but we should add \r before that
when appropriate.
I'm on it.
Ciao,
Dscho
next prev parent reply other threads:[~2016-01-25 7:26 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-22 17:01 [PATCH 0/2] Let merge-file write out conflict markers with correct EOLs Johannes Schindelin
2016-01-22 17:01 ` [PATCH 1/2] convert: add a helper to determine the correct EOL for a given path Johannes Schindelin
2016-01-22 18:47 ` Junio C Hamano
2016-01-22 19:04 ` Johannes Schindelin
2016-01-23 7:05 ` Torsten Bögershausen
2016-01-24 10:42 ` Johannes Schindelin
2016-01-23 6:12 ` Torsten Bögershausen
2016-01-24 10:41 ` Johannes Schindelin
2016-01-22 17:01 ` [PATCH 2/2] merge-file: consider core.crlf when writing merge markers Johannes Schindelin
2016-01-22 18:15 ` Junio C Hamano
2016-01-22 18:47 ` Johannes Schindelin
2016-01-22 19:08 ` Junio C Hamano
2016-01-24 10:44 ` Johannes Schindelin
2016-01-22 19:50 ` Eric Sunshine
2016-01-22 19:52 ` Eric Sunshine
2016-01-24 10:37 ` Johannes Schindelin
2016-01-24 18:26 ` Eric Sunshine
2016-01-25 7:02 ` Johannes Schindelin
2016-01-23 6:31 ` Torsten Bögershausen
2016-01-24 10:39 ` Johannes Schindelin
2016-01-22 17:52 ` [PATCH 0/2] Let merge-file write out conflict markers with correct EOLs Beat Bolli
2016-01-24 10:48 ` [PATCH v2 0/1] " Johannes Schindelin
2016-01-24 10:48 ` [PATCH v2 1/1] merge-file: let conflict markers match end-of-line style of the context Johannes Schindelin
2016-01-24 16:27 ` Torsten Bögershausen
2016-01-24 16:36 ` Torsten Bögershausen
2016-01-25 6:53 ` Johannes Schindelin
2016-01-25 19:45 ` Ramsay Jones
2016-01-26 8:54 ` Johannes Schindelin
2016-01-26 16:43 ` Ramsay Jones
2016-01-26 16:49 ` Johannes Schindelin
2016-01-24 22:09 ` [PATCH v2 0/1] Let merge-file write out conflict markers with correct EOLs Junio C Hamano
2016-01-25 7:25 ` Johannes Schindelin [this message]
2016-01-25 8:06 ` [PATCH v3 0/2] " Johannes Schindelin
2016-01-25 8:07 ` [PATCH v3 1/2] merge-file: let conflict markers match end-of-line style of the context Johannes Schindelin
2016-01-25 8:32 ` Torsten Bögershausen
2016-01-25 8:59 ` Johannes Schindelin
2016-01-25 20:12 ` Junio C Hamano
2016-01-26 9:04 ` Johannes Schindelin
2016-01-26 17:22 ` Junio C Hamano
2016-01-25 8:07 ` [PATCH v3 2/2] merge-file: ensure that conflict sections match eol style Johannes Schindelin
2016-01-25 9:20 ` Johannes Schindelin
2016-01-26 14:42 ` [PATCH v4 0/2] Let merge-file write out conflict markers with correct EOLs Johannes Schindelin
2016-01-26 14:42 ` [PATCH v4 1/2] merge-file: let conflict markers match end-of-line style of the context Johannes Schindelin
2016-01-26 18:23 ` Junio C Hamano
2016-01-26 21:14 ` Junio C Hamano
2016-01-27 7:58 ` Johannes Schindelin
2016-01-27 18:19 ` Junio C Hamano
2016-01-27 19:12 ` Johannes Schindelin
2016-01-27 19:32 ` Junio C Hamano
2016-01-28 7:55 ` Johannes Schindelin
2016-01-26 14:42 ` [PATCH v4 2/2] merge-file: ensure that conflict sections match eol style Johannes Schindelin
2016-01-27 16:37 ` [PATCH v5 0/2] Let merge-file write out conflict markers with correct EOLs Johannes Schindelin
2016-01-27 16:37 ` [PATCH v5 1/2] merge-file: let conflict markers match end-of-line style of the context Johannes Schindelin
2016-01-27 16:37 ` [PATCH v5 2/2] merge-file: ensure that conflict sections match eol style Johannes Schindelin
2016-01-27 20:22 ` [PATCH v5 0/2] Let merge-file write out conflict markers with correct EOLs Junio C Hamano
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=alpine.DEB.2.20.1601250802240.2964@virtualbox \
--to=johannes.schindelin@gmx.de \
--cc=dev+git@drbeat.li \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.org \
--cc=sunshine@sunshineco.com \
--cc=tboegi@web.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).