[darcs-devel] Patch "plugins"

Geoffrey Alan Washburn geoffw at cis.upenn.edu
Mon Feb 6 14:06:18 PST 2006


I looked at the confirmed ideas and wish-list pointed to by the darcs 
wiki, but I didn't see anything like what I had in mind.  In particular, 
I was curious as to whether any thought had been given to being able to 
design "plugins" to extend the language of "atomic" patches.

At least as I understand from looking at the manual there are a few 
"atomic" sorts of patches "hunks", "binary file modifications", "add a 
new file", etc.  Then there are ways to combine them into larger patches.

However, one annoyance I've had as of late is that most software uses a 
diff algorithm for text and maybe something special, like Xdelta for 
binary data.  But quite a bit of data these days is structured, XML 
being the most popular example.  But another good example are is just
plain old ASCII text.

For example, Subversion, in a really ad-hoc way, allows users from 
having to deal with DOS/Unix/Mac end-of-line conversions.  The thought 
would be to make this into a new kind of "atomic" patch that people 
could choose as a "plugin".

Similarly, XML documents are meaning invariant under quite a few 
operations (even more if you know the DTD or schema, but it would be 
better to start with invariants for all valid XML documents).  One could 
imagine a "plugin" for an XML "atomic" patch that would take these basic 
invariants into account.

Of course, users using these "plugins" would not necessarily be able to 
communicate their patches to others who don't have the same set of 
plugins, but I don't see this as especially onerous.  One might even 
imagine requiring a kind of backwards compatibility mode with all these 
"plugins" such that they can be normalized to the core language of 
patches, but losing some of the advantages (i.e. you don't get end of 
line conversion for free).

There is also the question of how to enforce that "plugin" patches obey 
the theory of patches.  I see that there is already some investigations 
into using GADTs to ensure than invariants are maintained (I have to 
admit that was my favorite part of David's talk at the Haskell Workshop) 
, but even then that might not be enough.  ghc is continuing to push 
forward with making more and more dependent type like features 
available, so perhaps eventually that will be enough.  A more immediate 
proposal, but definitely more radical, would be to start coding up the 
theory of patch framework in Coq, which supports Haskell code extraction.

Anyway, I would be curious to hear what people think about this idea, 
because this is something I'd really like to see in version control system.

Geoff





More information about the darcs-devel mailing list