On Wed, Feb 27, 2013 at 10:21 PM, Paul Burba <ptbu...@gmail.com> wrote:

> (Stefan - If you don't have time to read all this please at least take
> a look at the short questions at the very end)
>

No worries :) Thanks for digging into this problem.

General remark: I'm working at and committing from my
Ubuntu 12.04 laptop since mid January and will continue
to do so until Easter. That means: Subversion 1.6.17.


> On Mon, Feb 18, 2013 at 11:54 AM, Mark Phippard <markp...@gmail.com>
> wrote:
>
> > BTW, how are you managing your branch?  I tried merging it back to
> > trunk to get an idea on the diff and there were a lot of text and tree
> > conflicts.  I thought I had seen you doing synch merges from trunk in
> > the past so I assumed it would merge back.
>
> On Thu, Feb 21, 2013 at 5:05 AM, Stefan Fuhrmann
> <stefan.fuhrm...@wandisco.com> wrote:
>
> > Hm. I split fsfs.c and .h into multiple files on the
> > branch and the first merge from /trunk required
> > significant manual intervention. Since that, merges
> > have been clean because fsfs.* wasn't touched
> > on /trunk.
> >
> > If I understand Julian's merge changes in 1.8,
> > reintegrating should work because there has been
> > no cherry picking etc.
>
> On Thu, Feb 21, 2013 at 11:04 AM, Mark Phippard <markp...@gmail.com>
> wrote:
>
> > I see this when using 1.8:
> >
> > $ svn mergeinfo ^/subversion/branches/fsfs-format7
> >     youngest common ancestor
> >     |         last full merge
> >     |         |        tip of branch
> >     |         |        |         repository path
> >
> >     1414755            1448697
> >     |                  |
> >        --| |------------         subversion/branches/fsfs-format7
> >       /
> >      /
> >   -------| |------------         subversion/trunk
> >                        |
> >                        1447423
> >
> > It seems to imply that it does not think you have ever synched with
> > trunk.  So maybe it is trying to replay every revision from your
> > branch when I merge back and that is why it gets so many conflicts?
>
> I found the cause of the conflict filled reintegrate merge.  The
> automatic merge code seems to be doing the right thing re Mark's
> automatic merge above, the problem arises earlier.
>
> First, here is the relationship between the two branches in question:
>
> trunk@1414755------------@1442089---@r1445080------------>
>        |                    |           |           ^
>       copy                 sync        sync         |
>        |                   merge       merge   conflict-filled
>        |                    |           |         automatic
>        |                    |           |          merge
>        |                    |           |           |
>        V                    V           V           |
>    fsfs-format7@1414757---r1442344---r1445479------------>
>
> The first problem is that the "sync" merge in r1442344 recorded the
> wrong mergeinfo:
>
> >svn log ^^/subversion/branches/fsfs-format7 -r1442344
> ------------------------------------------------------------------------
> r1442344 | stefan2 | 2013-02-04 15:48:05 -0500 (Mon, 04 Feb 2013) | 2 lines
>
> On the fsfs-format7: ketchup merge from /trunk up to and including
> r1442089.
> Some conflicts due to splitting up fs_fs.c needed to be resolved.
> ------------------------------------------------------------------------
>
> >svn diff --depth empty ^^/subversion/branches/fsfs-format7 -c1442344
> Index: .
> ===================================================================
> --- .   (revision 1442343)
> +++ .   (revision 1442344)
>
> Property changes on: .
> ___________________________________________________________________
> Modified: svn:ignore
> ## -49,3 +49,6 ##
>  zlib
>  sqlite-amalgamation
>  serf
> +gtest
> +.git
> +.gitignore
> Modified: svn:mergeinfo
>    Merged /subversion/branches/issue-4116-dev:r1424719-1425040
>    Merged /subversion/trunk:r1414758-1442089
>                              ^^^^^^^
>                              Why not r1414756?
>                              That is the first revision on trunk after
>                              the branch was created.
>

I simply didn't notice it, so I wrongly assumed at the
branch was created from 1414756. Don't remember
which tool I used to created the repo-repo copy to
open the branch.

   Merged
> /subversion/branches/tweak-build-take-two:r1424288-1425049,1425051-1425613
>    Merged /subversion/branches/in-repo-authz:r1414342-1424779
>    Merged /subversion/branches/issue-4194-dev:r1410507-1414880
>    Merged /subversion/branches/wc-collate-path:r1407642
>
> The mergeinfo recorded makes it look like a big cherrypick of
> r1414758-1442089 was done from ^/subversion/trunk to
> ^/subversion/branches/fsfs-format7, rather than a proper sync merge.
> Well, not to worry, the subsequent sync merge committed in r1445479
> will notice that /subversion/trunk:r1414756-1414757 has *not* been
> merged and merge those missing revisions -- they are inoperative but
> that doesn't matter, the mergeinfo should still be recorded.  Except
> that didn't happen either:
>

That is no surprise as I merged (lastmerge+1):headRev.

>svn diff --depth empty ^^/subversion/branches/fsfs-format7 -c1445479
> Index: .
> ===================================================================
> --- .   (revision 1445478)
> +++ .   (revision 1445479)
>
> Property changes on: .
> ___________________________________________________________________
> Modified: svn:mergeinfo
>    Merged /subversion/trunk:r1442090-1445080
>
> So why is this a problem?  Because later, when we try to merge the
> branch back to trunk, the automatic merge code is trying to determine
> if it is dealing with a "sync" or "reintegrate" style merge, it sees
> that there is a gap in the mergeinfo on the source branch (i.e.
> /subversion/trunk:r1414756-1414757) that makes it appear that the
> branch is *not* fully in sync with the trunk.  Not-in-sync means no
> reintegrate-style merge, but rather a normal sync style merge, which
> (just like 1.7 if the --reintegrate option isn't used) doesn't do what
> we want.  It tries to merge all of the branches changes, resulting in
> dozens of tree conflicts.
>

Why doesn't the merge code recognize r1414756 as inconsequential?

So that is the cause of the problem Mark observed, but why did the
> sync merges Stefan performed in r1442344 and 1445479 do the wrong
> thing?  Repeating those two offending merges I am not able to
> replicate the faulty mergeinfo in either case:
>
> The first sync merge done in r1442344:
>
> C:\SVN\src-branch-fsfs-format7>svn info
> Path: .
> Working Copy Root Path: C:\SVN\src-branch-fsfs-format7
> URL: https://svn.apache.org/repos/asf/subversion/branches/fsfs-format7
> Relative URL: ^/subversion/branches/fsfs-format7
> Repository Root: https://svn.apache.org/repos/asf
> Repository UUID: 13f79535-47bb-0310-9956-ffa450edef68
> Revision: 1442343
> Node Kind: directory
> Schedule: normal
> Last Changed Author: stefan2
> Last Changed Rev: 1442081
> Last Changed Date: 2013-02-04 06:27:56 -0500 (Mon, 04 Feb 2013)
>
> C:\SVN\src-branch-fsfs-format7>svn st
>
> C:\SVN\src-branch-fsfs-format7>svn merge ^^/subversion/trunk . --accept
> postpone
> --- Merging r1414756 through r1450917 into '.':
> U    get-deps.sh
> U    Makefile.in
> U    build.conf
> .
> <SNIP>
> .
> U    autogen.sh
> U    aclocal.m4
> D    packages
>  U   .
> --- Recording mergeinfo for merge of r1414756 through r1450917 into '.':
>  G   .
> Summary of conflicts:
>   Text conflicts: 5
>   Tree conflicts: 1
>
> C:\SVN\src-branch-fsfs-format7>svn diff --depth empty
> Index: .
> ===================================================================
> --- .   (revision 1442343)
> +++ .   (working copy)
>
> Property changes on: .
> ___________________________________________________________________
> Modified: svn:mergeinfo
>    Merged /subversion/branches/issue-4116-dev:r1424719-1425040
>    Merged /subversion/trunk:r1414756-1450917
>                              ^^^^^^^
>                              That's right! The mergeinfo picks up right
>                              after the yca.
>    Merged
> /subversion/branches/tweak-build-take-two:r1424288-1425049,1425051-1425613
>    Merged /subversion/branches/in-repo-authz:r1414342-1424779
>    Merged /subversion/branches/issue-4194-dev:r1410507-1414880
>    Merged /subversion/branches/wc-collate-path:r1407642
> Modified: svn:ignore
> ## -49,3 +49,6 ##
>  zlib
>  sqlite-amalgamation
>  serf
> +gtest
> +.git
> +.gitignore
>
>
> The second merge in r1445479, which should have filled in the
> mergeinfo gap, also works when I tried it:
>
> C:\SVN\src-branch-fsfs-format7>svn info
> Path: .
> Working Copy Root Path: C:\SVN\src-branch-fsfs-format7
> URL: https://svn.apache.org/repos/asf/subversion/branches/fsfs-format7
> Relative URL: ^/subversion/branches/fsfs-format7
> Repository Root: https://svn.apache.org/repos/asf
> Repository UUID: 13f79535-47bb-0310-9956-ffa450edef68
> Revision: 1445478
> Node Kind: directory
> Schedule: normal
> Last Changed Author: stefan2
> Last Changed Rev: 1445080
> Last Changed Date: 2013-02-12 05:02:13 -0500 (Tue, 12 Feb 2013)
>
>
> C:\SVN\src-branch-fsfs-format7>svn st
>
> C:\SVN\src-branch-fsfs-format7>svn merge ^^/subversion/trunk --accept
> postpone
> --- Merging r1442090 through r1450954 into '.':
> U    get-deps.sh
> U    Makefile.in
> U    build.conf
> .
> <SNIP>
> .
> U    INSTALL
> U    CHANGES
> D    packages
> --- Recording mergeinfo for merge of r1414756 through r1450954 into '.':
>  U   .
> Summary of conflicts:
>   Text conflicts: 1
>
> C:\SVN\src-branch-fsfs-format7>svn diff --depth empty
> Index: .
> ===================================================================
> --- .   (revision 1445478)
> +++ .   (working copy)
>
> Property changes on: .
> ___________________________________________________________________
> Modified: svn:mergeinfo
>    Merged /subversion/trunk:r1414756-1414757,1442090-1450954
>                              ^^^^^^^^^^^^^^^
>                              The gap is plugged!
>
> So what happened?  There are a few options that I can see:
>
> 1) Transient mergeinfo recording bug that afflicted the client that
> Stefan used to do the merges (I don't recall anything like this
> recently and this is pretty basic stuff that has been in place since
> 1.6).
>

Used 1.6.17. But that does not seem to be the root cause:

$ /usr/bin/svn merge ^/subversion/trunk .
--- Merging r1445081 through r1450992 into '.':
              ^^^^
       So, it recognizes that r1414756 as inconsequential.
U    get-deps.sh
... gazillion changes and a conflict on fs_fs.c ...

$ /usr/bin/svn pl -v | grep "trunk"
    /subversion/trunk:1414756-1450992

The mergeinfo now covers r1414756 as well.

2) Stefan didn't actually do a sync merge, but rather did a cherry
> pick, e.g. 'svn merge ^/subversion/trunk branch-wc -r1414757:HEAD'.
> Stefan - do you recall how you did these merges?  How about what
> client version you used?  Did you use --allow-mixed-revisions by
> chance
>

The client that I used will always send revision ranges
to the SVN libs and that is the trigger of what we are
seeing here. So, yes, technically, a cherry pick as in
"picking all cherries that there are".

I guess the question is why we make that a user problem.
The user (me) intended to merge all changes from /trunk
to the branch and told svn where to find these. The fact
that SVN gets confused by completely unrelated changes
not being listed explicitly is a tool (SVN) problem.

3) Some as of yet undiscovered bug
>

Only a usability issue.


> P.S. Stefan, In the meantime I suggest you do the following record
> only merge to plug the gap, so when your branch is ultimately merged
> back to trunk it will be possible via a simple automatic merge:
>
> svn merge ^/subversion/trunk --record-only -r1414755:1414757
>

Done in r1451004.

-- Stefan^2.

-- 
Certified & Supported Apache Subversion Downloads:
*

http://www.wandisco.com/subversion/download
*

Reply via email to