I (Julian Foad) wrote: > Work needed: > > 1. A UI and data structure to input the user-specified matchings. > (Straightforward.) > > 2. A routine that assigns EIDs to the three trees based on the > user-specified matchings and path matching. (Straightforward.) > trees > > 3. Fetching the contents of the source-side trees -- easiest would be > to fetch each tree separately in its entirety. A big performance > improvement would be to fetch src_left and diff(src_left:src_right), > and construct src_right from those. Better still, also construct > src_left from target and diff(target, src_left).
I've started working on this (2. and 3.) -- in the assign_eids_to_trees() function. I think I will in fact use diffs, because otherwise it would be hugely expensive which would make a bad first impression, and anyway it seems to be just as easy to get the info from diffs as from full tree walks. > 4. Conversion of the element-based result to a series of WC edits. The > code in branch_compat.c doesn't quite do this, as it assumes an Ev1 > output (with only a 'copy' operation) whereas the WC API has a 'move' > operation that we probably need to use. In general it will need to > insert temporary moves e.g. to swap X and Y it may need to start by > moving X to temporary name Z. Unless the WC API moves can also be set > up using just 'copy' operations, in which case the approach in > branch_compat.c is on the right track although it is currently buggy. Anyone willing to help write one of the other parts? - Julian