ezirminversion
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 on with it. 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 persistent 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 ["work"; "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"]
The mergeable datatypes currently available are:
- Blog_log: An append-only
log stored as blobs. Append is an
O(n)
operation wheren
is the size of the log. - Log: An append-only
write-optimized log with support for paginated reads. Append is an
O(1)
operation - Queue: An efficient queue with
O(1)
push and pop operations. - Lww_register: Last-writer-wins register.
Since these datatypes are defined such that a merge is always possible and that merges in different orders converge, they are CRDTs.
The backends available are:
- Git file system backend
- Git in-memory backend
Ezirmin is distributed under the ISC license.
Author | KC Sivaramakrishnan <sk826@cl.cam.ac.uk> |
---|---|
License | ISC |
Published | |
Homepage | https://github.com/kayceesrk/ezirmin |
Issue Tracker | https://github.com/kayceesrk/ezirmin/issues |
Maintainer | KC Sivaramakrishnan <sk826@cl.cam.ac.uk> |
Dependencies |
|
Source [http] | https://github.com/kayceesrk/ezirmin/releases/download/0.1.0/ezirmin-0.1.0.tbz sha256=0e14fb6e0918a41ab61fa7e14c15e9ffda950088374ecfe6fc9d569c1fc8d423 md5=cd9ea932b471fb237ec478c867455b69 |
Edit | https://github.com/ocaml/opam-repository/tree/master/packages/ezirmin/ezirmin.0.1.0/opam |
No package is dependent