This summer I work on making Darcs over networks faster. My project consists of two parts:
- Implement an optimization for getting repository over HTTP. This is done by creating a snapshot of current repository state.
- Create a smart server for darcs, which is able to determine the patches needed by client and send them with response. This will be the most effective way to get/pull a repository, since it reduces the number of roundtrips to minimum.
The original complete description of the project can be seen
on the wiki. Note, however, that for smart server more priority is given to the CGI frontend, rather than plain HTTP.
Changes so far
I glad to report that the most work on HTTP optimization is complete and patches are on their way to the Darcs repository. Some notes on implementation:
- getting an optimized repository results in almost the same copy as for unoptimized one. While inventory files may be split in different ways, semantically resulting repositories remain identical.
- there is still a couple of issues with special cases, like working with cache and handling interrupts; I will hopefully resolve them in nearest time.
Next week
At the moment I have started implementing the smart server. Besides the completing of the work on optimize --http issues, on the next week I will refactor the get/pull commands' code, which will result in cleaner API for the server.