Skip to content

Releases: mirage/irmin

Mirage support

17 Jul 18:11
Compare
Choose a tag to compare
  • 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

06 Jul 19:00
Compare
Choose a tag to compare
  • Add a version check for HTTP client and server. The client might add the
    version in the HTTP headers using the X-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 a version 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, make git fsck and git 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

03 Jul 17:06
Compare
Choose a tag to compare
  • 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 making Irmin.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 and nocrypto for the tests.
  • Make the file-locking code a bit more robust

New watch API, fixes to export, views, lca computation. Remove Snapshots.

03 Jul 13:52
Compare
Choose a tag to compare
  • 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) and Task.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 use View.diff to compute differences between
      views if needed.
  • 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 and Irmin.update_head.
  • Change signature of Irmin.iter to include the values and move it into
    the Irmin.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

16 Mar 16:52
Compare
Choose a tag to compare
Pre-release
  • Ensure that Irmin.update and Irmin.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 of Irmin.tag and Irmin.tag_exn
  • Do not throw [Not_found]. Now all the _exn function raise Invalid_argument
    (#144)
  • Remove Irmin.switch and Irmin.detach
  • Add Irmin.history to get the branch history as a DAG of heads (#140).
  • Fix the computation of lcas (#160)

0.9.3

04 Feb 19:45
Compare
Choose a tag to compare
0.9.3 Pre-release
Pre-release
  • 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 the old 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

19 Jan 17:25
Compare
Choose a tag to compare
0.9.0 bug-fix Pre-release
Pre-release
  • 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 uses None).
  • 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 a Path sub-module. Keys of
    the resulting Irmin store will be of type Path.t.
  • Fix irmin init --help. (#103)

Support for Cohttp 0.14.0+ interface

26 Dec 01:31
Compare
Choose a tag to compare
Pre-release

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

26 Dec 01:14
Compare
Choose a tag to compare
  • Improve the efficiency of the Git backend
  • Expose a cleaner API for the Unix backends
  • Expose a cleaner public API
  • Rename Origin into Task 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 andsha1and usenocrypto` instead
  • Remove dependency to caml4
  • Fix writing contents at the root of the store (#73)
  • More efficient synchronization protocol between Irmin stores (#11)

Improve View.merge_path + dump graphs improvement

25 Jun 19:31
Compare
Choose a tag to compare
  • Support backend specific protocols for push/pull
  • The Irmin Git backend can now sync with remote Git repositories
  • Simplify the organisation of the libraries: irmin, irmin.backend,
    irmin.server and irmin.unix (check how the example are compiled)
  • Small refactoring to ease the use of the API. Now use open Irmin_unix
    at the top of your file and use less functor in your code (again,
    check the examples)