Marc Strapetz wrote:
> Julian Foad wrote:
>> It looks like we have an agreement in principle. Would you like to file an 
>> enhancement issue?
> 
> Great. I've filed an issue now:
> 
> http://subversion.tigris.org/issues/show_bug.cgi?id=4469
> 
> Would you please review the various attributes (Subcomponent, ...)?

That's great, thanks. I added a reference to this email thread, added myself to 
the CC list, and tweaked the type from 'feature' to 'enhancement' (just my 
personal interpretation) and schedule from '---' to 'unscheduled' (which just 
indicates I've thought about it and am stating that it's not currently tied to 
any particular release, it doesn't mean it has to stay that way).

I talked with Brane about this and we discussed how it might make more sense to 
do a higher level API. Instead of asking "what is the absolute difference in 
the mergeinfo representations?" it could ask "What merges and other interesting 
events have occurred in the lifetime of this path?". There are a couple of 
reasons.

The API as sketched so far is pretty straightforward, but even so the effort 
needed to implement it is not trivial. It requires RA protocol changes as well 
as all the layers of API change. The mergeinfo representation is subject to 
change. It feels like a backward step to invest effort in adding more support 
that is tied specifically to the current format.

SmartSVN and other front ends like to be able to draw a merge graph. Even the 
'svn mergeinfo' command-line command now draws a little ASCII-art graph showing 
limited information about the most recent merge. At present they all have to 
interpret mergeinfo themselves, at a pretty low level, and the interpretation 
is subtle and poorly understood. (I don't understand the edge cases related to 
adds and deletes properly, and I've been working with it for years.)

So it seems like a good idea to encapsulate the interpretation of mergeinfo a 
bit more, and expose data in a form that is geared specifically towards 
explaining the history in the way that users can understand it. Maybe think of 
it as an extended 'log' operation, adding a small number of new notification 
types such as:

  * there is a full merge into here, bringing in all the new changes
      from PATH up to REV;
  * there is a partial merge to here, bringing in some changes
      from PATH between REV1 and REV2;

What do you think of that sort of interface? Does your code already calculate 
something like that?

- Julian

Reply via email to