Sprint started!

Friday, May 6, 2016

I’m blogging live from the first Pijul sprint, at the Aalto Design Factory in Helsinki. Feel free to stop by and say hello if you’re around!

Goals for this sprint

There’s a number of projects we want to tackle during this sprint:

  • Interoperability with darcs. This means refactoring some of the darcs codebase to make it call libpijul to apply patches. One goal is to get the darcs UI to use libpijul directly. It’s also a good test for API usability.

  • Finish debugging memory management in Sanakirja. The only remaining challenge is to maintain correct reference counts when deleting keys. The biggest difficulty is that we don’t want to change the base if the keys to delete are not found, and we also don’t want to copy pages that will get deallocated immediately afterwards.

Log

Friday, May 6th

  • Discussion about licenses. What’s the best scheme to prevent centralization of our tool?

  • Talked about several features of the theory of Pijul, in particular why it needs to be different from categorical constructions out there (even though it’s inspired by them). We have a proof scheme that it works, and axioms showing why it’s what we want to use for version control.

  • Partial checkouts: easy in Pijul? At least not impossible. More challenging: lazy history of partial repositories, even if some patches overlap with parts we don’t want.

Saturday, May 7th

  • Discussed the whole design of Sanakirja this morning.

  • Achievement: we have C bindings to the new main API for libpijul! We used to have bindings to the previous version before the last refactoring/module splitting, but the ones we have now are much better.

  • Ganesh is refactoring large parts of the darcs code to use pijul as just a drop-in replacement for the internals of darcs.

  • Florent is adding more tests, showing bugs in Sanakirja and in Pijul. Telling what part of the stack causes the bug is not easy.

  • I (PE) will need a new strategy to debug Sanakirja. The only tests still failing are the ones involving reference counting and deletions.

Sunday, May 7th

  • Haskell bindings working! There’s still some impedance mismatch between the two APIs, but now the goal of “libpijul-based darcs” seems much more realistic than before.

  • More discussions on theory. Discussions on output_repository, we need to implement unrecord in order to do it cleanly (the current version of Pijul can get confused by conflicts in file names). Florent starts working on unrecord.

  • Complexity talk. Is Pijul really “log in the size of history”, as I keep claiming? It seems so.

  • Pristines are strictly increasing with history. How to implement pseudo-inverse patches for conflict resolutions? We have ideas, let’s see how they work, first in theory.