On Thu, Dec 9, 2021 at 8:34 AM Nathan Hartman <[email protected]> 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