I'd like to work on adding support for auto-resolving tree conflicts
with incoming moves during updates and merges, and also local moves
during merges. This builds on the efforts we made to resolve tree
conflicts involving local moves during updates in Subversion 1.8.
I've discussed some of my ideas before and during the hackathon week
with several people (e.g. Julian, Branko, and Stefan2), mostly in
private conversations. It's now time to present my ideas to dev@.
I know that several people are already attacking these problems from
several angles. Most ideas I've heard from others revolve around how
to transmit move information from/to the server and how to store it
in the repository filesystem. I'd like to put my main focus elsewhere,
to fill in an important missing piece of the puzzle:
What will a Subversion client do with information about incoming
moves when trying to resolve tree conflicts?
My goals include research into ideal behaviour during conflict
resolution, as well as design and implementation. I plan to use the
use cases we collected during Subversion 1.6 development as a starting
I've recently update these notes to describe the current state of
things, as of Subversion 1.8. I plan to continue updating the file
as things progress.
My current plan is to try to implement support for resolving each use
case one by one, following the current use case numbering. Since use
case 1 has already been implemented for Subversion 1.8, I will start
with use case 2 and work my way down the list from there.
I will probably use one feature branch per use case, and merge to
the trunk whenever a stable set of changes is ready. This approach
fits well into the proposed branching/merging model for Subversion 1.9
and beyond, as discussed at http://svn.haxx.se/dev/archive-2013-06/0243.shtml
Of course, collaboration on any of my branches is very welcome!
Note that, for now, I am aiming for a complete client-side
implementation, leaving the RA and server-side bits for others
to fill in. I plan to lift code from the moves-scan-log branch
into the conflict resolver, so the conflict resolver can detect
incoming moves via a heuristic which scans the revision log for moves.
I will ensure that any future developments in the RA layer and on
the server can be plugged into the resolver instead when ready.
The code actually resolving conflicts will receive information about
incoming moves but won't care about how that information was derived.
I believe scanning the log works to a good degree of accuracy.
It is the same idea used by tools such as TruMerge
It can also serve as a backwards-compat layer when talking to
Subversion 1.8 and older servers, regardless of any server-side
enhancements made in future Subversion releases. Also, the code for
scanning the log has already been developed, and can now be
forward-ported into the current conflict resolver implementation
(or we can move it into the actual svn_client_log() code to be
optionally triggered there -- I'm not quite sure about that yet,
but this is an implementation detail not worth discussing right now).
There is a possibility that my work on this project will be funded
by a customer for several months. The customer understands that
features will only be designed and developed in consensus with the
Subversion community, and that I cannot make unilateral decisions
about the content of an official Subversion release. I will act as
a mediator between the community's requirements and the customer's
requirements. This situation is very similar to the implementation
of initial tree conflict detection for Subversion 1.6. At that time,
a collab.net/elego customer supported Steve Butler and myself with
funding. So this isn't an unusual situation. But I want to be open
about the potential funding to avoid any confusion about my motives
(not that I expect anyone to be surprised about my continued interest
in tree conflicts :)
The customer would like early access to the features developed as
part of this effort. I think this is a great opportunity to get
real-world testing of new features before we decide whether to ship
them in an official release. To facilitate this early access, I plan
to create a custom 1.8.x branch in our repository as per the policy
described at http://subversion.apache.org/docs/community-guide/releasing.html#custom-releases
and ship custom releases from there to the customer. I will make sure
to avoid confusion between the official Apache Subversion 1.8 releases
and any custom releases.
I welcome any additional help and support in this area, of course,
and will continue to track and support other developers looking at
improving Subversion's support for renames in other areas, such as
the RA layer and the repository filesystem.
If you have any further questions about this project, I will gladly
Received on 2013-06-20 12:34:23 CEST