The slides for the talk are here. They’re a work-in-progress – as I think of things, I’ll continue to update them.
You can try out a few browser-based demos of the features of the diff and DVCS libraries:
* a demo of diff, comm, and patch functionality.
* a demo of three-way merge and conflict-handling functionality.
The code is available using Mercurial by
hg clone http://hg.opensource.lshift.net/synchrotron/ (or by simply browsing to that URL and exploring from there). It’s quite small and (I hope) easily understood – at the time of writing,
* the diff/diff3 code and support utilities are ~310 lines; and
* the DVCS code is ~370 lines.
The core interfaces, algorithms and internal structures of the DVCS code seem quite usable to me. In order to get to an efficient DVCS from here, the issues of storage and network formats will have to be addressed. Fortunately, storage and network formats are only about efficiency, not about features or correctness, and so they can be addressed separately from the core system. It will also eventually be necessary to revisit the naive LCA-computation code I’ve written, which is used to select an ancestor for use in a merge.
The code is split into a few different files:
* The sources for the diff and diff3 demos and the DVCS demo. In the latter, check out the definition of
presets.preset1 for an example of how to use the DVCS, and
presets.ambiguousLCA for an example of the repository format and the use of the revision import feature.
* The diff and diff3 code itself.
* Graph utilities (for computing LCA etc)
* The DVCS and pseudo-file-system code.
* The repository history-graph-drawing code and a python script for drawing the little tile images used in rendering a repository history graph.