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