On Thu, Apr 11, 2013 at 9:59 PM, Julian Foad <julianf...@btopenworld.com> wrote: > Hi Christoph. > > Christoph Schulz wrote: >> [...] silently ignoring the deletion of a non-existing file part is not a >> sound decision in my opinion. > >> [...] the problem is that [...] no conflict is _detected_ at all. > > I agree that this behaviour is not good when you want strict conflict > detection. > > This particular behaviour is just one of several heuristics in Subversion > that aim to help the more casual user by producing a 'fairly obvious' output > instead of being strict and flagging a conflict. These heuristics include: > > * If the target file content is already equal to the right-hand side of the > merge source, then do nothing. (That's this issue.) > > > * When adding a text hunk, if the same hunk appears already at the same > place (or at a similar place, as determined by the context-matching > rules) then do nothing with that hunk. > > * When adding a whole > file or directory, if that file already exists (even if its content is > different) then there is an internal option to not flag a conflict. > (The 'adds_as_modification' parameter to svn_client_update4(), which the > svn command-line client sets true during 'svn update'.) > > * In some cases, deleting a file that is already deleted is not considered > a conflict. > > And there are probably more. > > In my > opinion, the user need to be able to specify either 'strict' mode or > 'guess what I probably want' mode, since both modes are useful in > different situations. The 'strict' mode should disable *all* of those > heuristics and cause a conflict to be raised in those cases. > > >> Stefan Sperling wrote: >>> If we are currently giving our users less choice during conflict >>> resolution than they should have, we need to fix that. If however >>> there is only one practical resolution for the conflict in question, >>> then I don't see a need to change Subversion's behaviour. > > Users have different needs when merging. Some people merge in a loosely > controlled setting, where the same change may have been made on two different > branches independently, or patches may have been applied that haven't been > recorded as merges, and so on. In that kind of situation it can be most > useful if the tool automatically chooses a reasonably likely result for each > conflict. > > On the other hand, sometimes people merge in a tightly controlled setting, > where perhaps each change entered the version control system on exactly one > branch, and the mergeinfo accurately reflects what has and has not been > merged, and so on. The user expects the merge to apply a predictable set of > changes. The user may know that none of the changes are going to conflict > unless the user has made a mistake, or perhaps the user knows that the only > changes that might conflict are the changes that touch a certain set of > files. In this kind of situation, it is helpful if the tool can flag any > unexpected situation, because quite likely a mistake has been made. > > Of course in 'strict' mode it will be useful for Subversion to offer an easy > way for the user to select the 'obvious' resolution for the conflict, but > the more important thing is to be able to detect such conflicts. > > So I would like us to implement such a mode. > > (I have been thinking of the 'strict mode' for a couple of years already, but > I still don't know the complete list of heuristics that we have at the > moment. I only became aware of this "don't merge if the file already looks > like the right-hand side of the incoming change" heuristic a few weeks ago > when I was digging through that part of the code.) > > The simplest implementation would have a single mode flag that just selects > 'strict' or 'not strict'. A slightly more sophisticated implementation could > have a bunch of flags that individually control the various heuristics, and > probably a top-level control to easily switch them all on or all off. Either > way, this would be a significant improvement. > > - Julian
FYI, another user complained about this on the users list (Fredrik Orderud, CC'd) [1]. He has filed issue #4405 [2]. Perhaps some of the interested parties here can take a closer look? Or maybe Fredrik or anyone can start / continue discussion to go towards a detailed specification of the behavior of such an optional 'strict' flag or something like that ... (no specific interest myself, just trying to tie some loose ends together) [1] http://mail-archives.apache.org/mod_mbox/subversion-users/201308.mbox/%3ccahgmiisrngb1sogdlhkky+9epunqvjz8v7j_lyfakxezz54...@mail.gmail.com%3E [2] http://subversion.tigris.org/issues/show_bug.cgi?id=4405 (Merge order affects final result for repeated added & deleted changes) -- Johan