1.0.0
1.0.0 (2017-02-21)
Major API changes:
- It is now simpler to define mergeable contents, using new
combinators to describe data-types (seeType
). - The mutable views have been replaced by immutable trees, and made
first-class citizen in the API (see availableS.Tree
).
Transactions now only ensure snapshot isolation instead of full
serialisability. - Creating a store with default path and branch implementations
is now easier using theKV
functors which just take one parameter:
the contents. - the backend and user-facing API are now totally independant (instead
of being half-included in each other inirmin.0.*
), so that
backends have to implement the minimum set of functions to be
Irmin-compatible, and users can have many convenient high-level
functions when using the Irmin API. The backends implement
AO
andRW
, the frontend providesS
.
The package is also now split into 5 opam packages: irmin
, irmin-git,
irmin-http,
irmin-unixand
irmin-miragewith similarly named
ocamlfind` libraries.
More detailled changes:
- use result type everywhere (#397, @samoht)
- use
Fmt
everywhere (#397, @samoht) - rename
create
functions intov
(#397, @samoht)
irmin
- [info] rename
Task
intoInfo
to denote commit info (#397, @samoht) - [info] remove
Task.uid
(#397, @samoht) - [info] Commit messages are now plain strings (instead of a lists of
strings): changeTask.messages
intoInfo.message
, take a string
instead of a list of strings as parameter and removeTask.add
(#397, @samoht) - [info] change
Info.f
to only takesunit
as argument. Previously
it was taken an'a
which was used by the update functions. The
update functions now take a fullInfo.f
function as parameter,
which should be less confusing (#397, @samoht) - [merge] replace the dependency to
mirage-tc
by a new internal module
Type
using type-based combinators. This makes defining new mergeable
data-types much easier, especially records and variants (#397, @samoht) - [merge] change [Merge.t] to be an abstract type (#397, @samoht)
- [merge] add [Merge.f] to transform a [Merge.t] value into a merge function
(#397, @samoht) - [merge] add base merge combinators:
Merge.unit
,Merge.bool
,
Merge.char
,Merge.int
,Merge.int32
,Merge.int64
,
Merge.float
(#397, @samoht) - [merge] simplify the type of
Merge.option
,Merge.pair
, Merge.tripleand
Merge.alist` (#397, @samoht) - [merge] simplify and rename
Merge.MSet
intoMerge.MultiSet
(#397, @samoht) - [merge] simplify and rename
Merge.set
intoMerge.Set
(#397, @samoht) - [merge] rename
Merge.OP
intoMerge.Infix
and rename operators to
avoid name-clashing with other monads (#397, @samoht) - [merge] remove the
path
argument from the merge functions (#397, @samoht) - [merge] remove the need to defined a
Path
submodule inContents.S
(#397, @samoht) - [merge] add a (very simple at the moment)
Diff
module (#397, @samoht) - [api] read operations do not take a task parameter anymore (#397, @samoht)
- [api] write operations not take a full commit info instead of a confusing
'a
parameter (#397, @samoht) - [api] rename [Ref] into [Branch](#397, @samoht)
- [api] replace
S.read
byS.find
(#397, @samoht) - [api] replace
S.read_exn
byS.get
(#397, @samoht) - [api] add
S.kind
to check the kind of store entries (files, directories)
(#397, @samoht) - [api] remove the
View
functor, replaced by first-class support for
immutable treesS.Tree
(#397, @samoht) - [api] add
S.find_tree
to find immutable subtrees (#397, @samoht) - [api] add
S.find_all
to find contents and metadat (#397, @samoht) - [api] change
S.mem
to only check for contents, not subtree (#397, @samoht) - [api] add
S.mem_tree
to check for subtrees (similar behavior to
S.mem
inirmin.0.*
) (#397, @samoht) - [api] add
S.with_tree
for atomic update of subtrees. This
operation replaceswith_hrw_view
, but a weaker consistency
guarantee: instead of providing full seriasilabilty,S.with_tree
provides snapshot isolation, which is consistent enough for most of
the users. (#397, @samoht) - [api] rename
S.update
intoS.set
and ensure that the operation is
atomic by using a combination of test-and-set and optimistic concurrency
control. (#397, @samoht) - [api] change
S.remove
to ensure the operation is atomtic. - [api] add
S.status
to mimickgit status
. (#397, @samoht) - [api] remove all the
_id
suffixes. (#397, @samoht) - [api] add
S.merge_with_commit
andS.merge_with_branch
(#397, @samoht) - [api] more precise return type for
S.Head.fast_forward
(#401, @samoht) - [api] add
S.Commit
,S.Branch
(#401, @samoht) - [api] add
KV_MAKER
to ease the creation of store with string lists
as paths and strings as branches (#405, @samoht) - [backend] replace
RO.read
byRO.find
(#397, @samoht) - [backend] no more
RO.read_exn
(#397, @samoht) - [backend] no more
RO.iter
, replaced byRW.list
(#397, @samoht) - [backend] replace
RW.update
byRW.set
(#397, @samoht) - [backend] rename
RW.compare_and_set
intoRW.test_and_set
(#397, @samoht) - [backend] new
RW.watch
,RW.watch_key
andRW.unwatch
functions
to set-up low-level notifications (#397, @samoht)
irmin-git
- Adapt to
git.0.10.0
(#397, @samoht) - Remove the
LOCK
modules (#397, @samoht) - Rename
S.Internals
intoS.Git
(#397, @samoht) - Rename
S.Internals.commit_of_id
intoS.Git.git_commit
(#397, @samoht) - Add
S.Git.of_repo
to convert an Irmin repo into a Git repo (#397, @samoht) - Add
S.Git.to_repo
to convert a Git repo into an Irmin repo (#397, @samoht) - Expose
S.Git_mem.clear
andS.Git_mem.clear_all
for in-memory Git
backends (#397, @samoht) - Rename
Memory
intoMem.Make
(#405, @samoht) - Rename
FS
intoFS.Make
(#405, @samoht) - Remove
CONTEXT
and fold it intoIO
(#405, @samoht) - Add
Mem.KV
andFS.KV
to ease creatin of store with default
implementations for branches and paths (#405, @samoht) - Add
Mem.Ref
andFS.Ref
access tags, remotes and other Git references
(#407, @samoht) - Allow to set-up a custom
.git
path (#409, @samoht)
irmin-mirage
- Adapt to Mirage3 (@hannesm, @yomimono, @samoht)
- Rename the
Task
module intoInfo
to reflect the core API changes - Change
Info.f
to accept an optionalauthor
argument and a format
string as a message parameter (#261, #406 @samoht) - Rename
Irmin_git
intoGit
(#405, @samoht)
irmin-http
- Remove the high-level HTTP API (#397, @samoht)
- Rewrite the low-level (backend) API using
ocaml-webmachine
(#397, @samoht) - Add
KV
to ease creatin of store with default implementations for
branches and paths (#405, @samoht)
irmin-unix
- Rename
Irmin_unix.task
intoIrmin_unix.info
(#397, @samoht) - Remove
LOCK
(#397, @samoht) - Change
Irmin_unix.info
to take an optionalauthor
argument and accept
a format string as message parameter (#261, #406 @samoht) - Rename
Irmin_fs
intoFS
(#405, @samoht) - Rename
Irmin_git
intoGit
(#405, @samoht) - Rename
Irmin_http
intoHttp
(#405, @samoht)