Releases: mirage/irmin
Releases · mirage/irmin
support for lwt 2.5.0, bug fixes and content-type for the REST API
- Allow raw bodies in queries and responses for the REST API. This is
controlled by theContent-type
field set by the client:
by default, we still use JSON (or useapplication/json
) but using
application/octet-stream
will avoid having to hex-encode large
binary blobs to make them JSON-compatible. This feature is still
experimental (especially when using Git on the server) (#255) - Adapt to
ocaml-git.1.7.1
(which works withlwt.2.5.0
) - Expose
Store.config
for all the stores (AO
,RW
, etc.) - Expose
Irmin_git.Internals
to be able to get back the
Git commit objects from anhead
value (#245, #241) - Expose
Irmin.Private.remove_node
- Remove the special
__root__
filename in Irmin stores and in views
(#233)- This fixes
View.update_path
when the view contains a value at its
root. Now the updated path contains a the value stored at the root
of the view. - Writing a value to the root of a store is now an error
- Reading a value at the root of a store always return
None
- This fixes
- Make the HTTP backend re-raise the
Invalid_argument
andFailure
exceptions that were raised by the server.
Mirage support
- Fix wrong interaction of in-memory views and temporary branches in the store
(#237) - Fix
Irmin.update_tag
for HTTP clients - Initial MirageOS support. Expose
Mirage_irmin.KV_RO
to surface an
Irmin store as a read-only key/value store implementing `V1_LWT.KV_RO
(#107) - Expose `Irmin_git.Memory_ext. This allows the Git memory backend to be
configured with a non-empty conduit context. - Expose
Irmin.SYNC
- Transmit client tasks to the HTTP server on DELETE too (#227, @dsheets)
- Do note expose private types in the public interface (#234, @koleini)
- Fix missing zero padding for date pretty-printing (#228, @dsheets)
- Update the tests to use
ocaml-git.1.6.0
- Improve the style of the HTTP commit graph.
- Constraint the string tags to contain only alpha-numeric characters
and few mores (-
,_
, '.' and/
) (#186) - Fix a race condition in
Irmin.clone
. (#221) - Escpate double quotes in the output of commit messages to workaround
HTML display issues. (#222)
Fix regression in the Git backend, add HTTP API versionning
- Add a version check for HTTP client and server. The client might add the
version in the HTTP headers using theX-IrminVersion
header - the server
might decide to enfore the version check or not. The server always reply
with its version in the JSON reply, using aversion
field. The client
might use that information to bail out nicely instead of failing because
of some random unmarshalling errors due to API changes (#167) - Fix a regression in 0.9.5 and 0.9.6 when inserting new child in Git trees.
This could cause a tree to have duplicate childs having the same names,
which would confuse the merge functions, makegit fsck
andgit gc
complain a lot (with good reasons) and do some fency things with git
index. The regression has been introduced while trying to fix #190 (the fix
is in #229)
Fix slice serialisation and race in watch initialisation
- Fix the datamodel: it is not possible to store data in intermediate nodes
anymore (#209) - Fix serialization of slices (#204)
- Do not fail silently when the synchronisation fails (#202)
- Fix a race in the HTTP backend between adding a watch and updating the store.
In some cases, the watch callback wasn't able to see the first few updates
(#198) - Fix a race for all the on-disk backends between adding a watch and updating
the store. This is fixed by makingIrmin.Private.Watch.listen_dir
and
Irmin.Private.Watch.set_listen_dir_hook
synchronous. - Update the tests to use
alcotest >= 0.4
. This removes the dependency towards
OUnit
andnocrypto
for the tests. - Make the file-locking code a bit more robust
New watch API, fixes to export, views, lca computation. Remove Snapshots.
- Fix
Irmin.export
for the HTTP backend (#196, patch from Alex Zatelepin) - Fix a race in
Irmin.export
(#196, patch from Alex Zatelepin) - Add
Task.empty
(the empty task) andTask.none
(the empty task constructor) - Completely rewrite the notification mechanism. All the watch functions now
take a callback as argument and return a de-allocation function. The callbacks
receive a heads values (the last and current ones) and diff values. (#187)- Add
Irmin.watch_head
to watch for the changes of the current branch's head - Add
Irmin.watch_tags
to watch for the changes of all the tags in the store - Add
Irmin.watch_key
to watch for the changes of the values associated to a
given key (this is not recursive anymore). - Add
View.watch_path
to watch for the changes in a subtree. The function
return views and the user can useView.diff
to compute differences between
views if needed.
- Add
- Transfer the HTTP client task to the server to make the commit messages
relative to the client state (and not the server's) (#136) - Fix
View.remove
to clean-up empty directories (#190) - Fix the ordering of tree entries in the Git backend (#190)
- Allow to create a new head from a view and a list of parents with
View.make_head
(#188) - Allow to create an empty temporary branch with
Irmin.empty
(#161) - Use a pure OCaml implementation of SHA1, do not depend on nocrypto anymore
(#183, by @talex5) - Remove
Irmin.Snapshot
. Nobody was using it and it can be easily replaced by
Irmin.head
,Irmin.watch_head
andIrmin.update_head
. - Change signature of
Irmin.iter
to include the values and move it into
theIrmin.RO
signature. - Add
Irmin.fast_forward_head
(#172) - Add
Irmin.compare_and_set_head
(#171) - Simplify the RW_MAKER signature (#158)
- Fix Irmin_git.RW_MAKER (#159)
- Improve the efficiency of the LCA computation (#174, with @talex5 help)
- By default, explore the full graph when computing the LCAs. The previous
behavior was to limit the depth of the exploration to be 256 by default.
better concurrency properties
- Ensure that
Irmin.update
andIrmin.merge
are atomic. - Fix
Irmin.clone
of an empty branch - Add
Irmin.RW.compare_and_test
that the backends now have to implement
to guarantee atomicity of Irmin's high-level operations. - Add
Irmin.Private.Lock
to provide per-handler, per-key locking. This
can be used by backend to implement simple locking policies. - Add
Lwt.t
to the return type ofIrmin.tag
andIrmin.tag_exn
- Do not throw [Not_found]. Now all the
_exn
function raiseInvalid_argument
(#144) - Remove
Irmin.switch
andIrmin.detach
- Add
Irmin.history
to get the branch history as a DAG of heads (#140). - Fix the computation of lcas (#160)
0.9.3
- Fix the invalidation of the view caches (report by @gregtatcam).
This was causing some confusing issues where views' sub-keys where
not properly updated to to their new values when the view is merged
back to the store. The issues is a regression introduced in 0.9.0. - Add post-commit hooks for the HTTP server.
- Add
Irmin.watch_tags
to monitor tag creation and desctructions. - Fix
Irmin.push
- Add
Irmin.with_hrw_view
to easily use transactions. - Add a phantom type to
Irmin.t
to denote the store capabilities
read-only, read-write or branch-consistent. - The
~old
argument of a merge function can now be optional to
signify that there is no common ancestor. - Expose
Irmin.with_rw_view
to create a temporary, in-memory and
mutable view of the store. This can be used to perform atomic
operations in the store (ie. non-persistent transactions). - Simplify the view API again
- Expose the task of previous commits. This let the user access
the Git timestamp and other info such as the committer name (#90) - The user-defined merge functions now takes an
unit -> 'a result Lwt.t
argument for~old
(instead of'a
). Evalutating the
function will compute the least-common ancestors. Merge functions
which ignore theold
argument don't have to pay the cost of
computing the lcas anymore. - Expose
S.lcas
to get the least common ancestors - Update to ocaml-git 1.4.6
0.9.0 bug-fix
- Fix
S.of_head
for the HTTP client (regression introduced in 0.9.0) - Fix regression in displaying the store's graph over HTTP introduced by
0.9.0. - Fix regression in watch handling introduced in 0.9.0.
- Fix regressions in
Views
introduced in 0.9.0. (thx @buzzheavyyear for
the report) - Always add a commit when calling a update function (
Irmin.update
Irmin.remove
,Irmin.remove_rec
) even if the contents' store have
not changed. - The [head] argument of [Git_unix.config] now has a proper type.
- Expose synchronisation functions for basic Irmin stores.
- The user-provided merge function now takes optional values. The
function is now called much more often during recursive merges
(even if one of the 3 buckets of the 3-way merge function is not
filled -- in that case, it usesNone
). - Also expose the type of the keys in the type basic Irmin stores. Use
('key, 'value) Irmint.t
instead of'value Irmin.t
. - The user-defined
merge
functions now take the current filename being
merged as an additional argument. - The user-defined
Contents
should expose aPath
sub-module. Keys of
the resulting Irmin store will be of typePath.t
. - Fix
irmin init --help
. (#103)
Support for Cohttp 0.14.0+ interface
This point release updates the Irmin HTTP layer to be compatible with Cohttp 0.14.0 and higher.
Improved efficiency and removal of Core_kernel dependency
- Improve the efficiency of the Git backend
- Expose a cleaner API for the Unix backends
- Expose a cleaner public API
- Rename
Origin
intoTask
and use it pervasively through the API - Expose a high-level REST API over HTTP (#80)
- Fix the Git backend to stop constantly overwrite
.git/HEAD
(#76) - Add a limit on concurrently open files (#93, #75)
- Add
remove_rec
to remove directories (#74, #85) - Remove dependency to
core_kernel
(#22, #81) - Remove dependency to
cryptokit and
sha1and use
nocrypto` instead - Remove dependency to caml4
- Fix writing contents at the root of the store (#73)
- More efficient synchronization protocol between Irmin stores (#11)