Tree Conflict Tests
Below you can find, per "operation", a matrix of tree conflict tests, so we have an idea of how much work is still left to increase test coverage. The matrix row headers give the "local" situation, the column headers the "incoming change". These are only meant to be broad categories, an actual test may build up a very complex situation (but still be part of a certain category). The categories might need to be extended.
The numbers refer to the test numbers in conflicts_test.c. An indicates an XFail test.
TODO:
- Make it possible to add additional comments related to specific tests (as a footnote?).
- Extend the matrices with extra categories. For instance, for "merge" I'm thinking of using "add_f,edit_f" to indicate "f was added on the branch (anything before the comma) and locally edited (anything behind the comma)". In that case ",add_f" would be "branch is in sync, but has added f as a local uncommitted change"
- Create "cherrypick" as a specific "operation" with its own matrix? Here we could also create additional categories for incoming, to discern between what happened on trunk before the cherrypick-rev, and what's part of the cherrypick-rev ("mv_f,edit_f" then means: file was moved on trunk, and edited, and only the edit is cherrypick-merged).
- Create a script that can parse our C (and python?) tests, or their --list output. To help the script we could add some sort of tagging to our tests (in the test description), so it knows to what part of what matrix the test belongs. For instance: "[add_f-add_f] incoming add file ignore".
merge
*incoming> |
edit_f |
add_f |
add_d |
rm_f |
rm_d |
mv_f |
mv_d^f |
edit_f |
|
|
|
10. resolve: ignore |
|
12. resolve: text merge |
17. incoming move dir: options |
add_f |
|
1. resolve: ignore |
|
|
|
|
|
add_d |
|
|
3. resolve: replace |
|
|
|
|
rm_f |
|
|
|
18. resolve: accept |
|
|
|
rm_d |
|
|
|
|
|
|
|
mv_f |
23. options |
|
|
|
|
|
|
mv_d^f |
|
|
|
|
|
|
|
update
*incoming> |
edit_f |
add_f |
add_d |
rm_f |
rm_d |
mv_f |
mv_d^f |
edit_f |
|
|
|
13. resolve: ignore |
|
15. resolve: text merge |
28. with parent moved – resolve: text merge |
add_f |
|
31: resolve: text merge |
|
|
|
|
|
add_d |
|
|
34. resolve: ignore |
|
|
|
|
rm_f |
|
|
|
|
|
|
|
rm_d |
|
|
|
|
|
|
|
mv_f |
|
|
|
|
|
|
32: resolve: move dir merge |
mv_d^f |
|
|
|
|
|
|
|
switch
*incoming> |
edit_f |
add_f |
add_d |
rm_f |
rm_d |
mv_f |
mv_d^f |
edit_f |
|
|
|
|
|
16. resolve: text merge |
|
add_f |
|
|
|
|
|
|
|
add_d |
|
|
|
|
|
|
|
rm_f |
|
|
|
|
|
|
|
rm_d |
|
|
|
|
|
|
|
mv_f |
|
|
|
|
|
|
|
mv_d^f |
|
|
|
|
|
|
|
Output of conflicts-test --list that was used for the above table:
Test # Mode Test Description ------ ----- ---------------- 1 merge incoming add file text merge 2 merge incoming add file replace and merge 3 merge incoming add dir ignore 4 merge incoming add dir merge 5 merge incoming add dir merge with file change 6 merge incoming add dir merge with move history 7 merge incoming add dir replace 8 merge incoming add dir replace and merge 9 merge incoming add dir replace with file change 10 merge incoming delete file ignore 11 merge incoming delete file accept 12 merge incoming move file text merge 13 update incoming delete file ignore 14 update incoming delete file accept 15 update incoming move file text merge 16 switch incoming move file text merge 17 merge incoming move dir 18 merge incoming move dir with local edit 19 merge incoming move dir with local add 20 merge incoming delete vs local delete 21 merge file property 22 merge incoming move file merge with text conflict 23 merge incoming edit for a moved-away working file 24 merge incoming chained move vs local edit 25 merge incoming moved dir with moved file 26 merge incoming file move with new line of history 27 update incoming dir move with nested file move 28 update incoming dir move with parent move 29 update incoming dir move with parent moved back 30 update incoming dir move with parent moved twice 31 update incoming add file text merge 32 merge incoming move file merge with prop conflict 33 merge incoming move file merge with keywords 34 update incoming add dir ignore 35 update incoming add dir merge 36 update incoming add dir merge with obstructions