[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

RE: Three-way merge markers by default

From: Bert Huijben <bert_at_qqmail.nl>
Date: Mon, 7 Apr 2014 11:05:28 +0200

> -----Original Message-----
> From: Daniel Shahaf [mailto:d.s_at_daniel.shahaf.name]
> Sent: maandag 7 april 2014 10:35
> To: dev_at_subversion.apache.org
> Cc: Lev Serebryakov
> Subject: Three-way merge markers by default
>
> What do people feel about applying this patch (from the FreeBSD port) to
> trunk?
>
> [[[
> http://svn.freebsd.org/ports/head/devel/subversion/files/extra-patch-
> 3way-conflict-markers (mod_dav_svn)
> https://svnweb.freebsd.org/ports/head/devel/subversion/files/extra-
> patch-3way-conflict-markers?view=log (viewvc)
> (and mentioned previously in context of custom keywords:
> <http://mid.gmane.org/20100922180752.GJ25159@ted.stsp.name>)
> diff -ruN subversion/libsvn_wc/merge.c subversion/libsvn_wc/merge.c
> --- subversion/libsvn_wc/merge.c 2011-08-06 19:15:44.000000000 +0400
> +++ subversion/libsvn_wc/merge.c 2011-09-07 21:47:19.000000000 +0400
> @@ -413,7 +413,7 @@
> target_marker,
> right_marker,
> "=======", /* separator */
> -
svn_diff_conflict_display_modified_latest,
> +
svn_diff_conflict_display_modified_original_latest,
> pool));
> SVN_ERR(svn_stream_close(ostream));
>
> ]]]
>
> All it does is change the contents of conflict files in --accept=postpone
mode:
> it causes conflict markers to be rendered not as two sides
> <<<<<<
> mine
> ======
> theirs
> >>>>>>
> but as three sides
> <<<<<<
> mine
> ||||||
> original
> ======
> theirs
> >>>>>>
> .
> I find the latter style much easier to work with --- it is easier for me
to
> "Apply diff(ORIGINAL, THEIRS) to MINE" than to "Compare (MINE, THEIRS)
> and
> sort out which parts of the delta to keep and which to reverse".
>
> Does this break compatibility somehow? Scripts have the
foo.c.{mine,theirs,
> merged} files to work with. As to users, they may already be familiar
with
> the
> three-way syntax since the interactive conflicts resolver generates it[1];
if
> not, the book could explain the |||||| block like it explains <<<<<< and
> >>>>>>.

Note that while this gives complete information for update and switch, for
merging there are actually 4 sides instead of 3...

svn merge merges the difference between two files (left and right) into a
third file (mine), which also happens to have an original version (its
pristine version).

So theoretically in case of an update and switch the older versions are the
same file(left=pristine).

The problem is now: Are you now showing left or pristine as original?
Or what is "original"?

The answer for update/switch is easy, but I don't think the per file merge
code knows the difference between the operations. And I don't think our
users will really understand.
(I haven't found a merge tool that really uses all 4 versions except of some
experimental code in our libraries)

        Bert
Received on 2014-04-07 11:06:17 CEST

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.