-*- Text -*- Ideas for conflict handling UI improvements for Subversion 1.7/1.8 ================================================================== The new working copy library records detailed conflict information, which allows for user interface improvements when dealing with conflicts. New CLI Keywords ---------------- Access to the 3 versions of a conflicted item is provided via new peg-revision keywords, for text-, prop-, tree-, and patch-conflicts. svn cat foo.c@MINE svn ls src/include/@LEFT svn diff foo.c@MINE foo.c@RIGHT svn diff foo.c@LEFT foo.c svn diff foo.c@RIGHT foo.c LEFT: For update, the 'LEFT' version is the common ancestor of the 'RIGHT' and 'MINE' versions (i.e. the base version from before when the update was run). For merge, the 'LEFT' version is the version of the item as it appears at the merge-left revision. RIGHT: For update, the 'RIGHT' version is the version of the item as it appears in the revision updated to. For merge, the 'right' version is the version of the item as it appears at the merge-right revision. MINE: For both update and merge, this is the version of the item as found in the working copy when the conflict was detected (which does not necessarily equal the current working version!) The following commands support this notation: blame cat copy (only for @LEFT and @RIGHT as copy source) diff (### any restrictions here?) export info list log propget (get value of conflict version of property, e.g. "svn propget svn:eol-style foo.c@MINE") proplist (with -v, as above, but for multiple properties, e.g. "svn proplist -v foo.c@MINE" would display the 'mine' value for all conflicted properties, and the current value for non-conflicted properties) propset (set a conflict version as new value, e.g. "svn propset svn:mime-type foo.c@RIGHT foo.c" ### slightly cumbersome syntax) For backwards compatibility, temporary files in the working copy containing the content of these versions are still created for text and property conflicts. As before, these files are removed when the conflict is marked resolved. Special keywords exists for reject conflicts flagged by 'svn patch': svn cat foo.c@REJECT1 svn cat foo.c@REJECT2 svn cat foo.c@REJECT-2,5+10,4 REJECTN: The unidiff text of the N'th hunk which was rejected when the patch was applied. An alternative syntax is provided: REJECT-A,B+C,D: The unidiff text of the hunk with original offset A and original length B, and modified offset C and modified length D, which was rejected when the patch was applied. Each hunk has a unique header of the form "@@ -A,B+C,D @@", which is printed by 'svn patch' when a conflict occurs, and by 'svn status' when a patch reject conflict is shown. The following commands support this notation: svn cat Resolver -------- Interactive conflict resolution (which runs during update/merge in 1.6.x) can be invoked using the 'svn resolve' command (text and property conflicts only for now). The --accept option can still be used but is no longer required. Conflict URL/operation information ------------------------ 'svn info' can show URL@peg_rev information for any type of conflict. 1.6.x only shows this information for tree conflicts. It can also show which type of operation caused the conflict, and on which revisions the operation was operating.