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

Re: Issue #2853, do_single_file_merge() lacks comprehensive "Replace-style merge" capability due to lack of attention to ancestry

From: C. Michael Pilato <cmpilato_at_collab.net>
Date: 2007-07-31 17:21:27 CEST

C. Michael Pilato wrote:
> Daniel Rall wrote:
>> Mike, r25891 doesn't appear to handle Replace support for the 'svn merge
>> -r2:1 url' case which is blocking issue #2822 (by causing the failure
>> for revert test #15 w/ the patch in that issue). This particular case
>> does an implicit peg of HEAD, which is handled in the block above the
>> one quoted below (in which you've fixed the Replace problem for
>> history-sensitive merging).
>> In r25889, you changed the merge test case written by Senthil to avoid
>> this implicit use of a peg revision, and mentioned that "the jury is
>> still out (for me) on whether or not that use case is expected to
>> fail." Would you elaborate on this?
> Sure.
> Strictly speaking, and obeying the rules of the peg revision algorithm, 'svn
> merge -r2:1 URL[@HEAD]' means "please apply, in reverse, the change made to
> the line of history identified by URL@HEAD between revisions 1 and 2". In
> the test case mentioned, this causes a bit of a problem. URL@HEAD only has
> a single revision of history, r2 -- it doesn't exist in r1. A stretch in
> the interpretation of the peg-rev algorithm *might* let us allow to treat
> 'svn merge -r2:1 URL@HEAD' as a removal of all the lines in URL@2, but
> there's no support in the peg-rev algorithm whatsoever for referring to two
> different lines of the history. File-replace is, therefore, incompatible
> with that syntax.
> I'm looking over the code in discover_and_merge_children(), and what I see
> makes me suspicious. The code assumes that:
> "dir@PEG -rM:N" == "dir/child1@PEG -rM:N" + "dir/child2@PEG -rM:N" + ...
> Something tells me that simply isn't true.

Note that 'svn diff -r2:1 URL' produces the same kind of problem.

But if at a theoretical level discover_and_merge_children() is sane in its
assumptions, there's no reason why do_single_file_merge() couldn't take a
flag to force the interpretation of the arguments into an "I'm a subset of a
directory merge" mode, used only when not called as part of a file-targeted
'svn merge' invocation. In fact, I'll go ahead and add that mode now, and
we can deal with the theoretical implications later. This should solve your
revert test problem.

C. Michael Pilato <cmpilato@collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand

Received on Tue Jul 31 17:19:57 2007

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