Hi all,
davidm and me started working on a Mac GUI for darcs record, directly
interfacing darcs as a library. The graphical interface did not make too much progress yet, but at least we got some experiences with the interface for an external darcs record (encapsulated during work as a 'Darcs.Lib' layer).

* Used approach for external darcs record

- extract 'PatchChoice' set of new primitive patches from repo
- use sealed, tagged primitive patch list for building graphical representation
- use PatchChoice's forceFirst (select) and forceLast (skip) to update
- use getSlot (status) to query the status (select|undecided|skip)
- when finished, pass a list of pairs (primitive patch hash, status) to record ... - ... which then either records the patches or fails because of concurrent modifications

* Type witnesses
Type witnesses are really neat when writing darcs library code and helped to prevent some mistakes there (escaping of type variables). But they are also inconvenient to build at the moment and not easy to understand at the beginning. At the GUI / external tool level, we did not need them so far, because of working with sealed primitive patches and PatchChoice only. The Sealed2 type was fine, but added some clutter, requiring 'unseal2' at many places. Maybe using darcs library at a level so low it requires type witnesses will easily lead to corrupted repositories anyway.

* Hierarchical Modules
It seems unacceptable to have top-level modules like Printer and Sha1 in the darcs lib. Why not e.g. Text.PrettyPrint.Darcs or Darcs.Utils.Printer ?

* Performance?
The performance of PatchChoice use in this way was ok, but probably not good enough for large repos. 'yes n | my_record' takes roughly 3.6s for the last 800 primitive darcs patches recorded, updating the PatchChoice set in each step ('yes n | darcs record' needs 4.1s with HEAD darcs).

Any suggestions or feedback welcome,

cheers, benedikt (visq)

_______________________________________________
darcs-users mailing list
[email protected]
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to