Pijul 0.11

Tuesday, November 20, 2018
By Pierre-√Čtienne Meunier

I’d like to announce a new release of Pijul, version 0.11. This release fixes a large number of bugs, follows evolutions in the Rust ecosystem (Tokio), integrates better with existing software (SSH proxys and config files), and introduces an important feature of Pijul: /partial clones/.

Partial clones

This feature has been in the pipes for quite a while. One great possibility opened by patch commutation is the production of patches touching just one part of the repository, compatible with the rest of the work happening in other parts.

The way this is implemented in Pijul is by keeping track of the path touched by a patch (or more precisely, of the internal representation of that path, in order to be robust to file and directory moves), and by outputting only the paths touched by applied patches.

This also means that one can pull just the patches touching one path in the repository, output just that path, and produce patches that can be applied to the original repository.

If a patch also touches other paths than the ones we want, these extra paths are not output, and not considered by pijul record. They are still present in the internal representation of the repository, though.

This feature is used in commands pijul clone --path and pijul pull --path.

Tokio

The new architecture of Tokio is great, but has required a significant amount of work in Thrussh, Pleingres, Pijul and the Nest to make it work in all four crates at the same time.

The event loop of the Nest is considerably simpler and more efficient, as there is now only one event loop run on a threadpool.

I might write another post later on with a few examples of how this is done, with examples of Pleingres and Thrussh.

SSH proxies, config files and keys

This has been one of the main difficulties of Thrussh and Pijul for a long time. I have reasons to believe this is now solved, and has been tested on a number of different key types. Pijul is now able to parse ~/.ssh/config and to use many of the “important” instructions in there. This does not include persistent connections, but does include SSH proxies, aliases, identity files and default users.

Moreover, a number of users have reported problems with their keys. I’d like to thank @loevenheim in particular for providing an important test case.

Other bugs

An impressive number of small bugs have been fixed in this release, by (in chronological order of their first patch since Pijul 0.10.2) @lthms, @FlorentBecker, @yory, @laumann, Lassi Haasio, @remexre, @balrogboogie, @onio. I’ve also fixed a number of them.

I’d like to comment on two less minor bugs: