Skip to content

Releases: mirage/irmin

2.3.0

12 Jan 17:21
Compare
Choose a tag to compare

CHANGES:

Fixed

  • irmin-git

    • Update irmin to the last version of ocaml-git (#1065)
      It fixes an issue on serialization/deserialization of big tree object
      (see #1001)
  • irmin-pack*

    • Fix a major bug in the LRU which was never used (#1035, @samoht)
  • irmin*

    • Improve performance of last_modified (#948, @pascutto)

    • Changed the pattern matching of the function last_modified. The case of a
      created key is now considered a modification by the function. (#1167,
      @clecat)

    • Make Tree.clear tail-recursive (#1171, @samoht)

    • Fix Tree.fold ~force:(False f) where results where partially skipped
      (#1174, @Ngoguey42, @samoht and @craigfe )

    • Fix Tree.kind. Empty path on a tree used to return a None instead of a
      `Node. (#1218, @Ngoguey42)

  • ppx_irmin

    • Fix a bug causing certain type derivations to be incorrect due to unsound
      namespacing. (#1083, @craigfe)
  • irmin-unix

    • Update irmin config path to respect XDG_CONFIG_HOME. (#1168, @zshipko)

Added

  • irmin-layers (new):

    • Created a new package, irmin-layers that includes common signatures for
      layered stores. It contains a stub Make_layers functor (#882, @icristescu)
  • irmin-bench (new):

    • Created a new package to contain benchmarks for Irmin and its various
      backends. (#1142, @craigfe)
    • Added ability to get json output and a make target to run layers benchmark.
      (#1146, @gs0510)
  • irmin

    • Added Tree.Contents module exposing operations over lazy tree contents.
      (#1022 #1241, @craigfe @samoht)

    • Added Type.Unboxed.{encode_bin,decode_bin,size_of} to work with unboxed
      values (#1030, @samoht)

    • Remove the headers option in Type.{encode_bin,decode_bin,size_of}. Use
      Type.Unboxed.<fn> instead (#1030, @samoht)

    • Type.v now takes an extra mandatory unit argument (#1030, @samoht)

    • Added Type.pp_dump, which provides a way to pretty-print values with a
      syntax almost identical to native OCaml syntax, so that they can easily be
      copy-pasted into an OCaml REPL for inspection. (#1046, @liautaud)

    • Generic functions in Irmin.Type are now more efficient when a partial
      closure is constructed to the type representation (#1030 #1093, @samoht
      @craigfe). To make this even more explicit, these functions are now staged
      and Type.{unstage,stage} can manipulate these. The goal is to encourage
      users to write this kind of (efficent) pattern:

      let encode_bin = Type.(unstage (encode_bin ty))
      let _ = <begin loop> ... encode_bin foo ... <end loop>
    • Added a clear function for stores (#1071, @icristescu, @craigfe)

    • Requires digestif>=0.9 to use digestif's default variants
      (#873, @pascutto, @samoht)

    • Added iter_commits and iter_nodes functions to traverse the commits and
      nodes graphs (#1077, @icristescu)

    • Added Repo.iter to traverse object graphs (#1128, @samoht)

  • irmin-pack:

    • Added index_throttle option to Irmin_pack.config, which exposes the
      memory throttle feature of Index in Irmin-Pack. (#1049, @icristescu)

    • Added Pack.clear and Dict.clear (#1047, @icristescu, @craigfe, @samoht)

    • Added a migrate function for upgrading stores with old formats (#1070,
      @icristescu, @craigfe)

    • Added a flush function for a repo (#1092, @icristescu)

    • Added `Layered.Make functor, to construct layered stores from irmin-pack.
      (#882, @icristescu)

    • Added `Checks.Make which provides some offline checks for irmin-pack
      stores. (#1117, @icristescu, @craigfe)

    • Added reconstruct_index to reconstruct an index from a pack file. (#1097,
      @icristescu)

    • Added reconstruct-index command to irmin-fsck for reconstructing an index from
      the command line (#1189, @zshipko)

    • Added integrity-check command to irmin-fsck for checking the integrity of
      an irmin-pack store (#1196, @zshipko)

  • ppx_irmin:

    • Added support for deriving type representations for types with type
      parameters. Type 'a t generates a representation of type
      'a Type.t -> 'a t Type.t (#1085, @craigfe)

    • Added a --lib command-line option which has the same behaviour as the
      lib run-time argument (i.e. --lib Foo will cause ppx_irmin to derive
      type representations using combinators in the Foo module). (#1086,
      @craigfe)

    • Added an extension point [typ: <core-type>] for deriving type
      representations inline. (#1087, @craigfe)

Changed

  • irmin

    • Renamed the Tree.tree type to Tree.t. (#1022, @craigfe)

    • Replaced Tree.pp_stats with the type representation Tree.stats_t. (#TODO, @craigfe)

    • Changed the JSON encoding of special floats. Float.nan, Float.infinity
      and Float.neg_infinity are now encoded as "nan", "inf" and "-inf"
      respectively. (#979, @liautaud)

    • The functions Type.{v,like,map} no longer take a ~cli argument, and now
      take separate ~pp and ~of_string arguments instead. (#1103, @craigfe)

    • The Irmin.Type combinators are now supplied by the repr package. The
      API of Irmin.Type is not changed. (#1106, @craigfe)

    • Irmin.Type uses staging for equal, short_hash and compare to
      speed-up generic operations (#1130, #1131, #1132, @samoht)

    • Make Tree.fold more expressive and ensure it uses a bounded memory
      (#1169, @samoht)

    • Changed list and Tree.list to take optional offset and length
      arguments to help with pagination. Also return direct pointers to the
      subtrees to speed up subsequent accesses (#1241, @samoht, @zshipko,
      @craigfe, @Ngoguey42 and @icristescu)

  • irmin-pack:

    • sync has to be called by the read-only instance to synchronise with the
      files on disk. (#1008, @icristescu)

    • Renamed sync to flush for the operation that flushes to disk all buffers
      of a read-write instance. (#1008, @icristescu)

    • Changed the format of headers for the files on disk to include a generation
      number. Version 1 of irmin-pack was used for the previous format, version 2
      is used with the new format. (#1047, @icristescu, @craigfe, @samoht)

    • Use Repo.iter to speed-up copies between layers (#1149, #1150 @samoht)

    • Add an option to bypass data integrity checks on reads (#1154, @samoht)

    • Add heads parameter to check-self-contained command in Checks (#1224, @zshipko)

  • ppx_irmin:

    • The [@generic ...] attribute has been renamed to [@repr ...]. (#1082,
      @craigfe)

2.2.0

26 Jun 13:10
Compare
Choose a tag to compare

CHANGES:

Added

  • irmin:

  • ppx_irmin

    • Added support for the @nobuiltin attribute, which can be used when
      shadowing primitive types such as unit. See README_PPX for details.
      (#993, @craigfe)

    • Added support for a lib argument, which can be used to supply primitive
      type representations from modules other than Irmin.Type. (#994, @craigfe)

Changed

  • irmin:

    • Require OCaml 4.07 (#961, @craigfe)

    • Add sanity checks when creating Irmin.Type records, variants and enums
      (#956 and #966, @liautaud):

      • Irmin.Type.{sealr,sealv,enum} will now raise Invalid_argument if two
        components have the same name;
      • Irmin.Type.{field,case0,case1} will now raise Invalid_argument if
        the component name is not a valid UTF-8 string.
    • Changed the JSON encoding of options and unit to avoid ambiguous cases
      (#967, @liautaud):

      • () is now encoded as {};
      • None is now encoded as null;
      • Some x is now encoded as {"some": x};
      • Fields of records which have value None are still omitted;
      • Fields of records which have value Some x are still unboxed into x.
    • Changed pretty-printing of Irmin types to more closely resemble OCaml types.
      e.g. pair int string prints as int * string. (#997, @craigfe)

    • The type Irmin.S.tree is now abstract. The previous form can be coerced
      to/from the abstract representation with the new functions
      Irmin.S.Tree.{v,destruct} respectively. (#990, @craigfe)

  • irmin-mem

    • Stores created with KV now expose their unit metadata type. (#995,
      @craigfe)

Fixed

  • irmin-graphql
    • Fixed an issue with keys inside get_{contents,tree} fields having
      incorrect ordering (#989, @craigfe)

2.1.0

28 Feb 16:41
f6c8e16
Compare
Choose a tag to compare

CHANGES:

Added

  • ppx_irmin (new):

    • Created a new package, ppx_irmin, which provides a PPX deriving plugin
      for generating Irmin generics.
  • irmin-unix:

    • Added a --hash parameter to the command-line interface, allowing the hash
      function to be specified. For BLAKE2b and BLAKE2s, the bit-length may be
      specified with a trailing slash, as in --hash=blake2b/16. The hash
      function may also be specified in the configuration file. (#898, @craigfe)
  • irmin:

    • Added Irmin.Hash.Make_BLAKE2B and Irmin.Hash.Make_BLAKE2S functors for
      customizing the bit-length of these hash functions. (#898, @craigfe)
    • Added iter function over a closure graph (#912, @ioana)
    • Added Type.pp_ty for pretty-printing Irmin generics. (#926, @craigfe)
    • Added Merge.with_conflict for modifying the conflict error message of a
      merge function. (#926, @craigfe)

Changed

  • irmin-pack:

    • Changed the bit-length of serialized hashes from 60 to 30. (#897,
      @icristescu)
    • integrity_check can now try to repair corrupted values. (#947, @pascutto)
  • irmin-graphql:

    • Changed default GraphQL type names to ensure uniqueness. (#944, @andreas)

2.0.0

20 Nov 19:05
47883bc
Compare
Choose a tag to compare

CHANGES:

Added

  • irmin-pack (new):

    • Created a new Irmin backend, irmin-pack, which uses a space-optimised
      on-disk format.
  • irmin-graphql (new):

    • Created a new package, irmin-graphql, which provides a GraphQL server
      implementation that can be used with both the MirageOS and Unix backends.
      Additionally, a graphql command has been added to the command-line
      interface for starting irmin-graphql servers. (#558, @andreas, @zshipko)

    • Contents can now be queried directly using irmin-graphql with
      Irmin_graphql.Server.Make_ext and the Irmin_graphql.Server.PRESENTER
      interface. (#643, @andreas)

  • irmin-test (new):

    • Added a new package, irmin-test, which allows for packages to access the
      Irmin test-suite. This package can now be used for new packages that
      implement custom backends to test their implementations against the same
      tests that the core backends are tested against. (#508, @zshipko)
  • irmin-unix:

    • Add Cli module to expose some methods to simplify building command-line
      interfaces using Irmin. (#517, @zshipko)

    • Add global config file $HOME/.irmin/config.yml which may be overridden by
      either $PWD/.irmin.yml or by passing --config <PATH>. See irmin help irmin.yml for details. (#513, @zshipko)

  • irmin-git:

    • Allow import/export of Git repositories using Irmin slices. (#561, @samoht)
  • irmin-http:

    • Expose a /trees/merge route for server-side merge operations. (#714,
      @samoht)
  • irmin:

    • Add Json_value and Json content types. (#516 #694, @zshipko)

    • Add optional seed parameter to the Irmin.Type generic hash functions.
      (#712, @samoht)

    • Add V1 submodules in Commit, Contents and Hash to provide
      compatibility with 1.x serialisation formats. (#644 #666, @samoht)

    • Add Store.last_modified function, which provides a list of commits where
      the given key was modified last. (#617, @pascutto)

    • Add a Content_addressable.unsafe_add function allowing the key of the new
      value to be specified explicitly (for performance reasons). (#783, @samoht)

    • Add save_contents function for saving contents to the database. (#689,
      @samoht)

    • Add pretty-printers for the results of Sync operations. (#789, @craigfe)

    • Private.Lock now exposes a stats function returning the number of held
      locks. (#704, @samoht)

Changed

  • irmin-unix:

    • Rename irmin read to irmin get and irmin write to irmin set. (#501,
      @zshipko)

    • Switch from custom configuration format to YAML. (#504, @zshipko)

  • irmin-git:

  • irmin-http:

    • Rename CLIENT to HTTP_CLIENT and simplify the signatures necessary to
      construct HTTP clients and servers. (#701, @samoht)
  • irmin-mirage

    • Split irmin-mirage into irmin-{mirage,mirage-git,mirage-graphql} to
      allow for more granular dependency selection. Any instances of
      Irmin_mirage.Git should be replaced with Irmin_mirage_git. (#686,
      @zshipko)
  • irmin:

    • Update to use dune (#534, @samoht) and opam 2.0. (#583, @samoht)

    • Replace Irmin.Contents.S0 with Irmin.Type.S.

    • Rename Type.pre_digest -> Type.pre_hash and Type.hash ->
      Type.short_hash. (#720, @samoht)

    • Change Irmin.Type to use incremental hash functions (functions of type
      'a -> (string -> unit) -> unit) for performance reasons. (#751, @samoht)

    • Simplify the Irmin.Type.like constructor and add a new Irmin.Type.map
      with the previous behaviour.

    • Improvements to Irmin.Type combinators. (#550 #538 #652 #653 #655 #656
      #688, @samoht)

    • Modify Store.set to return a result type and create a new Store.set_exn
      with the previous exception-raising behaviour. (#572, @samoht)

    • Rename store module types to be more descriptive:

      • replace Irmin.AO with Irmin.CONTENT_ADDRESSABLE_STORE;
      • replace Irmin.AO_MAKER with Irmin.CONTENT_ADDRESSABLE_STORE_MAKER;
      • replace Irmin.RW with Irmin.ATOMIC_WRITE_STORE;
      • replace Irmin.RW_MAKER with Irmin.ATOMIC_WRITE_STORE_MAKER. (#601,
        @samoht)
    • Rename export_tree to save_tree (#689, @samoht) and add an option to
      conditionally clear the tree cache (#702 #725, @samoht).

    • Change hash function for Irmin_{fs,mem,unix}.KV to BLAKE2b rather than
      SHA1 for security reasons. (#811, @craigfe)

    • Move Irmin.remote_uri to Store.remote, for stores that support remote
      operations. (#552, @samoht)

    • Simplify the error cases of fetch/pull/push operations. (#684, @zshipko)

    • A batch function has been added to the backend definition to allow for
      better control over how groups of operations are processed. (#609, @samoht)

    • A close function has been added to allow backends to close any held
      resources (e.g. file descriptors for the FS backend). (#845, @samoht)

    • Simplify Private.Node.Make parameters to use a simpler notion of 'path' in
      terms of a list of steps. (#645, @samoht)

    • Rename Node.update to Node.add. (#713, @samoht)

Fixed

  • irmin-unix:

    • Fix parsing of commit hashes in revert command. (#496, @zshipko)
  • irmin-git:

  • irmin-http:

    • Respond with a 404 if a non-existent resource is requested. (#706, @samoht)
  • irmin:

    • Fix a bug whereby S.History.is_empty would return true for a store with
      exactly one commit. (#865, @pascutto)

Removed

  • irmin:
    • Remove pp and of_string functions from Irmin.Contents.S in favour of
      Irmin.Type.to_string and Irmin.Type.of_string.

    • Remove Bytes content type. (#708, @samoht)

    • Remove Cstruct dependency and content type. If possible, switch to
      Irmin.Contents.String or else use Irmin.Type.map to wrap the Cstruct
      type. (#544, @samoht)

1.4.0

07 Jun 11:40
Compare
Choose a tag to compare

1.4.0 (2018-06-06)

  • Add types for Contents.hash, Tree.hash and Commit.hash (#512, @samoht)
  • Tree.hash and Tree.of_hash now work on leaf nodes. To do this, Tree.hash
    has to return a more complex type (#512, @samoht)
  • support for webmachine 0.6.0 (#505, @ansiwen)

1.3.3

03 Jan 16:35
855d361
Compare
Choose a tag to compare

1.3.3 (2018-01-03)

1.3.2

23 Nov 15:44
44049ea
Compare
Choose a tag to compare

1.3.2 (2017-11-22)

  • support OCaml 4.06 where -safe-string is enabled by default (#477, @djs55)

1.3.1

25 Aug 15:31
Compare
Choose a tag to compare

1.3.1 (2017-08-25)

1.3.0

01 Aug 16:29
Compare
Choose a tag to compare

1.3.0 (2017-07-27)

irmin-chunk

Add a new package: irmin-chunk, which was initially in a separate repository
created by @mounirnasrallah and @samoht and ported to the new Irmin API by
@g2p (#464)

irmin-unix

Re-add the irmin binary, the example application which used to be
installed by irmin-unixbefore we switched to usejbuilder`
(#466, @samoht -- reported by @ouenzzo and @dudelson)

irmin

That releases saw a nice series of patches to improve the performance of
Irmin.Tree contributed by the Tezos team:

  • Improve complexity of Irmin.Tree operations: on trivial benchmarks with
    a lot of values, this patch introduces a 10-times speed-up
    (#457, @OCamlPro-Henry)

  • Add missing equality for Irmin.Type primitives (#458, @OCamlPro-Henry)

  • Change the type of Hash.digest to also take a type representation
    (#458, @OCamlPro-Henry)

  • add Irmin.Type.{encode,decode}_cstruct (#458, @OCamlPro-Henry)

  • remove Irmin.Contents.RAW (#458, @OCamlPro-Henry)

  • avoid unecessary serialization and deserialization when computing hashes
    of cstructs (#459, @OCamlPro-Henry)

  • remove {Type,Merge}.int which might cause some issue on 32 bits platforms.
    Intead use the more explicit (and portable) {Type,Merge}.int32 or
    {Type,Merge}.int64 (#469, @samoht)

1.2.0

06 Jun 10:48
Compare
Choose a tag to compare

1.2.0 (2017-06-06)

This release changes the build system to use
jbuilder. By doing so, it introduces
two new packages: irmin-mem and irmin-fs -- containing Irmin_mem and
Irmin_fs respectively. That release also fixes a bunch of regressions
introduced in the big 1.0 rewrite.

all

irmin

  • Fix Irmin.Contents.Cstruct: pretty-print the raw contents, not the hexdump
    (#442, @samoht)
  • Irmin.Hash.X.of_string should not raise an exception on invalid hash
    (#443, @samoht)

irmin-mem

  • New package! Use it if you want to use the Irmin_mem module.

irmin-fs

  • New package! Use it if you want to use the Irmin_fs module.

irmin-git