On Thu, Dec 9, 2021 at 8:34 AM Nathan Hartman <hartman.nat...@gmail.com> wrote:
> I haven't found the cause yet but I do know now that the bug isn't in how we 
> are constructing the path. I'm away from my machine atm but I'll write back 
> soon with more...

The OP's repro script creates this structure:

#  .
#  ├── a
#  ├── trunk/
#  │   └── c/
#  │       └── d/
#  └── branches/
#      └── b/ (from trunk@3)
#          └── c/
#              └── e/

The 'trunk/c/' and 'branches/b/c/' directories have separate ancestry
and (correctly) trigger the conflict.

The 'a' file is irrelevant.

The 'branches/b/c/e/' directory is irrelevant. The same assertion
fails whether it is present or not.

So the above can be distilled to:

#  .
#  ├── trunk/
#  │   └── c/
#  │       └── d/
#  └── branches
#      └── b/ (from trunk@2)
#          └── c/

It is the 'd' directory ('trunk/c/d/') that is throwing us off course.

As I said before I haven't finished yet; I'll try to have another
debug session tonight to look more closely at update_entry() in
libsvn_repos/reporter.c; I think there will be an important clue
there.

Simplified repo script:

[[[

$SVNADMIN create repo
$SVN checkout file://$PWD/repo wc1
cd wc1
$SVN mkdir ^/trunk -m ""
$SVN mkdir ^/branches -m ""
$SVN cp ^/trunk ^/branches/b -m ""
$SVN mkdir ^/trunk/c -m ""
$SVN mkdir ^/trunk/c/d -m ""
$SVN mkdir ^/branches/b/c -m ""
cd ..
$SVN co file://$PWD/repo/branches/b wc2
cd wc2
$SVN merge ^/trunk .

]]]

Cheers,
Nathan

Reply via email to