| -*- 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. |