blob: da83907bd0c042cb84741f9ead135a236b1627b9 [file] [log] [blame]
-*- 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.