Re: Moved file resolution fails

2024-01-30 Thread Stanimir Stamenkov via users

Tue, 30 Jan 2024, /Sands, Daniel N./:

So far I have not found a use case where moved file resolution in 1.8+ 
works as advertised on 1.7 servers.  But more specifically, I have the 
following case:


The trunk has a directory,
/foo/bar

In my local branch, I have relocated bar to
/baz/bar

Meanwhile, in the trunk, file /foo/bar/example.c got updated.  My local 
branch has been checked out from the 1.7 server so it no longer knows 
specifically about file moves.  When I merge the latest changes from the 
trunk, it creates a tree conflict on /foo/bar. It has completely lost 
the notion that there is a file within /foo/bar that was edited.


As far as I'm aware this is all client-side behavior – nothing to do 
with the server.  Resource move/rename has always been recorded as a 
_Delete_ of the original path and a _Copy_ (Add) from the previous path 
revision.  It could be I'm missing something here, also.


 The 
conflict data only knows that /foo/bar doesn't exist anymore.  My only 
option for resolution is to accept working – the search for where 
/foo/bar went also fails. And now the incoming edit to example.c is 
completely lost, and I wouldn't even know it existed until I did an svn 
diff on each revision that got merged in.


If I remember correctly, this had only worked the way you expect – 
automatic content merge into the moved file, pre-Subversion 1.6 when 
tree conflicts have been introduced.  I have never been a fan of this 
change and the complication to the svn merge it adds.


The way you generally resolve tree conflicts is with an extra merge (but 
could also be a delete) command per file/tree conflict:


svg merge ^/foo/bar baz/bar

Then you mark the conflicting files (command per path) as resolved:

svn resolve baz/bar --accept working

and finally commit, if you're satisfied with the state.

--
Stanimir


Moved file resolution fails

2024-01-30 Thread Sands, Daniel N. via users
So far I have not found a use case where moved file resolution in 1.8+ works as 
advertised on 1.7 servers.  But more specifically, I have the following case:

The trunk has a directory,
/foo/bar

In my local branch, I have relocated bar to
/baz/bar

Meanwhile, in the trunk, file /foo/bar/example.c got updated.  My local branch 
has been checked out from the 1.7 server so it no longer knows specifically 
about file moves.  When I merge the latest changes from the trunk, it creates a 
tree conflict on /foo/bar.  It has completely lost the notion that there is a 
file within /foo/bar that was edited.  The conflict data only knows that 
/foo/bar doesn't exist anymore.  My only option for resolution is to accept 
working – the search for where /foo/bar went also fails.  And now the incoming 
edit to example.c is completely lost, and I wouldn't even know it existed until 
I did an svn diff on each revision that got merged in.

So in summary, conflict resolution cannot find the new location for the 'bar' 
directory, and it completely forgot that there was an incoming file edit within 
that directory.

Is this a missed case in the resolution heuristic?  Or is there something I 
missed?