ezirmin

Authors { KC Sivaramakrishnan, Thomas Gazagnaire, Benjamin Farinier }
License ISC
Homepage https://github.com/kayceesrk/ezirmin
Issue Tracker https://github.com/kayceesrk/ezirmin/issues
Maintainer KC Sivaramakrishnan <sk826@cl.cam.ac.uk>
Dependencies
& git-unix 1.10.0
irmin 0.12.0
irmin-watcher
lwt
ocamlbuild
ocamlfind
ppx_jane
ptime
topkg
Available ocaml-version >= "4.01.0"
Published Feb 8, 2017
Source [http] http://github.com/kayceesrk/ezirmin/releases/download/0.2.0/ezirmin-0.2.0.tbz
05107c52d136602611024c71f03c343d
Statistics Installed 36 times in last month.
Edit https://github.com/ocaml/opam-repository/tree/master/packages/ezirmin/ezirmin.0.2.0/opam

An easy interface on top of the Irmin library.

Ezirmin is an easy interface on top of the Irmin library. It comes with set of mergeable datatypes, instantiated to specific backends to quickly get going. For example,

$ utop
utop # #require "ezirmin";;
utop # module M = Ezirmin.FS_queue(Tc.String);; (* Mergeable queue of strings *)
utop # open M;;
utop # open Lwt.Infix;;
utop # let m = Lwt_main.run (init ~root:"/tmp/ezirminq" ~bare:true () >>= master);;
val m : branch = <abstr>
utop # push m ["home"; "todo"] "buy milk";;
- : unit = ()
utop # push m ["work"; "todo"] "publish ezirmin";;
- : unit = ()

This mergeable queue is saved in the git repository at /tmp/ezirminq. In another terminal,

$ utop
utop # #require "ezirmin";;
utop # module M = Ezirmin.FS_queue(Tc.String);; (* Mergeable queue of strings *)
utop # open M;;
utop # open Lwt.Infix;;
utop # let m = Lwt_main.run (init ~root:"/tmp/ezirminq" ~bare:true () >>= master);;
val m : branch = <abstr>
utop # pop m ["home"; "todo"];;
- : string option = Some "buy milk"

For concurrency control, use branches. In the first terminal,

utop # let wip_t1 = Lwt_main.run @@ clone_force m "wip_t1";;
utop # push wip_t1 ["home"; "todo"] "walk dog";;
- : unit = ()
utop # push wip_t1 ["home"; "todo"] "take out trash";;
- : unit = ()

The changes are not visible until the branches are merged.

utop # to_list m ["home"; "todo"];;
- : string list = []
utop # merge wip_t1 ~into:m;;
- : unit = ()
utop # to_list m ["home"; "todo"];;
- : string list = ["walk dog"; "take out trash"]
No package is dependent