| The Berlin '16 hackathon was held at the elego offices in Berlin, Germany |
| on October 10-14. |
| |
| Tree conflict resolution |
| ------------------------ |
| |
| Stefan Sperling notes that there are several things about the tree conflict |
| resolver that are either missing or require further work: |
| |
| (Points with [X] were marked as important on the blackboard.) |
| |
| 1. Recommended resolution option(s) |
| |
| Having a reasonable default option may be useful for the users, so that |
| they wouldn't be continuously prompted on how to resolve the conflicts |
| (--accept=recommended). Another use case is the automatic conflict |
| resolution in a non-interactive environment (buildbot). |
| |
| Ivan Zhakov asked whether it makes sense to automatically apply the |
| "recommended" resolution option in case if there's only one "real" option. |
| |
| 2. Improving the move detection heuristic |
| |
| There are known cases where the current move detection heuristic doesn't |
| work. One example would be "cp A B; mv B/foo C/foo". |
| |
| ### What are the known and important cases that we need to handle? |
| |
| 3. Updating incoming moves is not implemented for directories [X] |
| |
| ### |
| |
| During the discussion of this point, Ivan Zhakov asked if it's possible to |
| extend the tree conflict storage so that all the necessary data would be |
| available to the resolver, and so that it wouldn't have to contact the |
| server during the actual resolution. |
| |
| 4. Incoming add resolution for directories |
| |
| There is ongoing work by Stefan Sperling on the "resolve-incoming-add" |
| branch that is aimed to properly handle cases with added directories by |
| using the diff processor. |
| |
| 5. Working copy operations are not atomic |
| |
| The problem is that performing things non-atomically may cause problems, for |
| instance, if the resolution process is cancelled by the user. |
| |
| Bert Huijben pointed out that the same problem exists if you run a merge. |
| |
| 6. Markup for descriptions, titles, short descriptions for third-party |
| API users [X] |
| |
| The issue was initially brought up by Ivan Zhakov. There are a few minor |
| problems with using the new API in 3rd-party applications -- for instance, |
| currently they may need to somehow deal with the newlines, strip out and |
| transform URLs, etc. They could benefit from having the details exposed |
| with some kind of a markup (that would separate URLs, ...). This could |
| give the API users more flexibility when displaying the conflict details |
| and options. |
| |
| Another related topic is that currently the API does not expose the |
| localized option titles (like, "Move my file and merge"), and does not |
| expose the short description ("Remote move vs local edit") of the conflict. |
| |
| 7. New resolution options |
| |
| We might need a mechanism to add new resolution options in patch releases. |
| Otherwise, new resolution options will only become available to the users |
| with the next minor release. |
| |
| 8. Resolution scripts |
| |
| ### |
| |
| 9. More tests [X] |
| |
| Currently, we do not test the behavior of interactive conflict resolver |
| in the Python tests, just via the C tests for the API. |
| |
| One minor discussed thing was that we could benefit from just using the |
| "trunk/branches/tags" layout in the new tests, instead of using the Greek |
| tree. |
| |
| 10. Issue with multirange merges |
| |
| It was pointed out that the switch to the new conflict resolution API |
| might have broken one scenario. In Subversion 1.9, if a user performs a |
| multirange merge, and merging the first revision range produces conflicts, |
| then resolving every conflict would automatically continue the merge. |
| In trunk, a user would have to manually re-run the merge command. |
| |
| It was mentioned that this could be caused by putting the client in charge |
| of the conflict resolution, instead of having a callback-based mechanism. |
| |
| 11. Using the new API requires users of the existing conflict API to |
| completely rewrite the relevant parts of the code |
| |
| (Items 10 and 11 were discussed together, but are split for convenience.) |
| |
| Another potential issue with making the API user responsible for properly |
| resolving the conflicts when it should be done, is that users of the |
| existing conflict API would need to rewrite their code to benefit from |
| the new resolution options. And they might need to update the code that |
| handles every operation. |