irmin

Irmin is a distributed database that follows the same design principles as Git

ISC License

Downloads
1.3K
Stars
1.8K
Committers
65

Bot releases are visible (Hide)

irmin - 2.3.0

Published by craigfe almost 4 years ago

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)
irmin - https://github.com/mirage/irmin/releases/tag/2.2.0

Published by craigfe over 4 years ago

CHANGES:

Added

  • irmin:

    • Added Irmin.Type.empty to represent an uninhabited type. (#961, @CraigFe)
    • Added Store.Tree.concrete_t. (#1003, @CraigFe)
  • 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)
irmin - https://github.com/mirage/irmin/releases/tag/2.1.0

Published by pascutto over 4 years ago

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)
irmin - https://github.com/mirage/irmin/releases/tag/2.0.0

Published by samoht almost 5 years ago

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:

    • Require ocaml-git >= 2.0. (#545, @samoht)

    • Cleanup handling of remote stores. (#552, @samoht)

  • 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:

    • Fix Node.add to preserve sharing. (#802, @samoht)
  • 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)

irmin - https://github.com/mirage/irmin/releases/tag/1.4.0

Published by samoht over 6 years ago

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)
irmin - https://github.com/mirage/irmin/releases/tag/1.3.3

Published by samoht almost 7 years ago

1.3.3 (2018-01-03)

  • complete support for OCaml 4.06 (#484, @samoht)
  • support cohttp 1.0 (#484, @samoht)
irmin - https://github.com/mirage/irmin/releases/tag/1.3.2

Published by samoht almost 7 years ago

1.3.2 (2017-11-22)

  • support OCaml 4.06 where -safe-string is enabled by default (#477, @djs55)
irmin - https://github.com/mirage/irmin/releases/tag/1.3.1

Published by samoht about 7 years ago

1.3.1 (2017-08-25)

  • irmin-http: update to cohttp.0.99 (#467, @samoht)
irmin - https://github.com/mirage/irmin/releases/tag/1.3.0

Published by samoht about 7 years ago

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)

irmin - https://github.com/mirage/irmin/releases/tag/1.2.0

Published by samoht over 7 years ago

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

  • Use jbuilder (#444, @samoht)
  • Use mtime 1.0 (#445, @samoht)

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

  • Fix watches (#446, @samoht)
irmin - https://github.com/mirage/irmin/releases/tag/1.1.0

Published by samoht over 7 years ago

1.1.0 (2017-04-24)

irmin

  • Change the type of S.Tree.find_tree to return a tree option instead of
    tree. This is a breaking API change but it let distinguish between
    the empty and non-existent cases (#431, @samoht)
  • Allow to specify branches in urls for fetch using the url#branch syntax
    (#432, @samoht)
  • Expose Irmin.Merge.idempotent for values with idempotent operations
    (#433, @samoht)
  • Add a S.repo type as an alias to the S.Repo.t (#436, @samoht)
  • Fix regression in S.Tree.diff intoduced in the 1.0 release: nested
    differences where reported with the wrong path (#438, @samoht)

irmin-unix

  • Update to irmin.1.1.0 API changes (@samoht)

irmin-git

  • Update to irmin.1.1.0 API changes (@samoht)
irmin - https://github.com/mirage/irmin/releases/tag/1.0.2

Published by samoht over 7 years ago

1.0.2 (2017-03-27)

irmin

  • Add a cstruct type combinator (#429, @samoht)
  • Fix regression introduced in 1.0.1 on merge of base buffers (strings,
    cstruct). For these types, updates are idempotent, e.g. it is fine
    if two concurrent branches make the same update. (#429, @samoht)

irmin-unix

  • Add irminconfig man page (#427, @dudelson)
irmin -

Published by samoht over 7 years ago

1.0.1 (2017-03-14)

irmin

  • Default merge function should not assume idempotence of edits
    (#420, @kayceesrk)
  • Wrap the merge functions for pair and triple with the default case.
    (#420, @kayceesrk)

irmin-unix

  • Support all versions of cmdliner, 1.0.0 included (@samoht)
irmin - https://github.com/mirage/irmin/releases/tag/1.0.0

Published by samoht over 7 years ago

1.0.0 (2017-02-21)

Major API changes:

  • It is now simpler to define mergeable contents, using new
    combinators to describe data-types (see Type).
  • The mutable views have been replaced by immutable trees, and made
    first-class citizen in the API (see available S.Tree).
    Transactions now only ensure snapshot isolation instead of full
    serialisability.
  • Creating a store with default path and branch implementations
    is now easier using the KV 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 in irmin.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 and RW, the frontend provides S.

The package is also now split into 5 opam packages: irmin, irmin-git, irmin-http,irmin-unixandirmin-miragewith similarly named ocamlfind` libraries.

More detailled changes:

  • use result type everywhere (#397, @samoht)
  • use Fmt everywhere (#397, @samoht)
  • rename create functions into v (#397, @samoht)

irmin

  • [info] rename Task into Info 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): change Task.messages into Info.message, take a string
    instead of a list of strings as parameter and remove Task.add
    (#397, @samoht)
  • [info] change Info.f to only takes unit as argument. Previously
    it was taken an 'a which was used by the update functions. The
    update functions now take a full Info.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 into Merge.MultiSet (#397, @samoht)
  • [merge] simplify and rename Merge.set into Merge.Set (#397, @samoht)
  • [merge] rename Merge.OP into Merge.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 in Contents.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 by S.find (#397, @samoht)
  • [api] replace S.read_exn by S.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 trees S.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 in irmin.0.*) (#397, @samoht)
  • [api] add S.with_tree for atomic update of subtrees. This
    operation replaces with_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 into S.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 mimick git status. (#397, @samoht)
  • [api] remove all the _id suffixes. (#397, @samoht)
  • [api] add S.merge_with_commit and S.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 by RO.find (#397, @samoht)
  • [backend] no more RO.read_exn (#397, @samoht)
  • [backend] no more RO.iter, replaced by RW.list (#397, @samoht)
  • [backend] replace RW.update by RW.set (#397, @samoht)
  • [backend] rename RW.compare_and_set into RW.test_and_set (#397, @samoht)
  • [backend] new RW.watch, RW.watch_key and RW.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 into S.Git (#397, @samoht)
  • Rename S.Internals.commit_of_id into S.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 and S.Git_mem.clear_all for in-memory Git
    backends (#397, @samoht)
  • Rename Memory into Mem.Make (#405, @samoht)
  • Rename FS into FS.Make (#405, @samoht)
  • Remove CONTEXT and fold it into IO (#405, @samoht)
  • Add Mem.KV and FS.KV to ease creatin of store with default
    implementations for branches and paths (#405, @samoht)
  • Add Mem.Ref and FS.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 into Info to reflect the core API changes
  • Change Info.f to accept an optional author argument and a format
    string as a message parameter (#261, #406 @samoht)
  • Rename Irmin_git into Git (#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 into Irmin_unix.info (#397, @samoht)
  • Remove LOCK (#397, @samoht)
  • Change Irmin_unix.info to take an optional author argument and accept
    a format string as message parameter (#261, #406 @samoht)
  • Rename Irmin_fs into FS (#405, @samoht)
  • Rename Irmin_git into Git (#405, @samoht)
  • Rename Irmin_http into Http (#405, @samoht)
irmin - https://github.com/mirage/irmin/releases/tag/0.12.0

Published by samoht almost 8 years ago

0.12.0 (2016-11-17)

  • Depends on irmin-watcher 0.2.0 to use portable file-system watches
    (fsevents on OSX or inotify on Linux) to replace the slow and CPU
    intensive file-system polling that was the default (#380, @samoht)
  • Do not use Lwt_unix.fork in the tests anymore (#383, @samoht)
  • Switch from Stringext to Astring (#382, @samoht)
  • Fix regression in the tests for using Git over HTTP (#376, @samoht)
  • Catch top-level exceptions in watch callbacks (#375, @samoht)
  • Fix merge of assoc list with no common ancestor (#374, @samoht)
  • Improve documentation for Git bare repositories (#363, @kayceesrk)
  • New functor Make_with_metadata to customize the type of the
    nodes metadata (#364, @samoht)
  • Remove mentions of private modules from the public interface
    (#364, @samoht)
irmin - Fix compilation of examples

Published by samoht about 8 years ago

  • Fix compilation of examples (#359, @samoht)
  • Use Logs (#342, @talex5)
  • Improve non-unix portablity of Irmin_fs (#345, @samoht)
  • Change the signature of Store.iter to defer opening the
    file only when needed. This was causing a file-descriptor
    early exhaustion on Windows (#345, @samoht)
  • Fix paths for references on Windows (#345, @samoht)
  • Port to ocaml-git 1.8.0
  • Rather large API change in Irmin.Private.Contents.Store
    and Irmin.Private.Commit.Store to make it easier to
    build new and efficient Irmin backends. (#346, @samoht)
  • Fix performance problem in the computation of LCAs (#351, @talex5)
  • Fix sort order for Git trees (#352, @talex5)
  • Support for launchd: the --address argument of the CLI now
    supports a URI launchd://<name> where <name> corresponds
    to the section in the property list file (#321, by @djs55)
  • Expose /watch-rec in the REST API (#326, by @samoht)
  • Expose Store.Key = Contents.Path in Irmin.Maker. Otherwise,
    the type of steps is abstract. (#327, by @talex5)
irmin - Git-like API

Published by samoht about 9 years ago

  • Fix the Irmin_mem backend to work when equal keys might be not
    structurally equal (Pervasives.(=) is evil)
  • Fix Hash.SHA1.equal to always return true when the underlying
    bigarrays are equals. Before that, this was only the case when
    the whole Cstruct.t where identical: ie. same bigarray but also
    same offset in the Cstruct.t value, which is obviously not
    always the case. Apply the same fix to Hash.SHA1.compare and
    Hash.SHA1.hash.
  • Renamed "tag" to "branch" in the API, as "tag" is confusing for Git
    users. BC.tag is now BC.name and BC.branch is now BC.head_ref.
    The various "Tag" modules are now called "Ref" ("Branch" would be
    confusing here since they only store references to commits, not the
    branch contents).
    Note: The remote HTTP protocol still uses "tag".
  • Remove Irmin_http_server.listen. Instead, return the Cohttp
    configuration for the server and let the user perform the listen. The
    resulting API is simpler (removes timeout and uri parameters),
    more flexible, and easier to use from Mirage.
  • Remove Irmin.task from API of internal stores (commit, node, etc).
    Tasks are now passed explicitly to operations that need them, so it
    is now explicit which operations create commits. For example, the
    API now makes it clear that lcas doesn't change anything, while
    lca requires a task because it may create commits.
    Apart from simplifying the code, this change also makes it possible to
    create the internal stores once, not once per commit message.
    Note: this does not affect the main BC API, so most users will see no
    difference.
  • Remove Irmin.Basic. This was a functor that took a functor for making
    stores and returned a functor for making stores with strings for
    branch names and SHA1 for the hash. It's easier to write the
    application out in full than to explain to people what it does.
    This change also makes it possible for back-ends to provide extra
    operations in a type-safe way. In particular, Irmin_git.Internals
    has moved inside the store type and the runtime check that it is only
    used with the correct store type is now enforced at compile time
    instead.
  • Removed AO.config. It was only used by the removed Git.Internals hack.
  • Moved AO.create to AO_MAKER.
  • Remove dummy functions that are no longer needed with the new API:
    • View.task is gone (it never did anything).
    • View.create is gone (it ignored both its arguments and called View.empty).
    • Ir_node.Graph.Store.create (unused, but previously required by AO).
    • Ir_commit.History.Store.create (same).
  • Removed the unused-and-not-exported Ir_bc.Make and Ir_bc.MAKER
    features.
  • Combine Ir_bc.STORE_EXT and Ir_s.STORE. Ir_s was the only
    consumer of the Ir_bc.STORE_EXT interface, and all it did was repack
    the values to match its own interface. Now, Ir_bc exports the final
    public API directly, which simplifies the code.
  • Moved module types into ir_s.mli and removed ir_s.ml.
    Before, all module types were duplicated in the .ml and .mli files.
  • BC stores now contain a Repo module. A Repo.t represents a
    repository as a whole, rather than any particular branch. Operations
    which do not look at the current branch have been moved to this
    module. They are: branches, remove_branch, heads,
    watch_branches, import, export, and task_of_head.
    When updating old code, you can use BC.repo t to get a Repo.t
    from a branch.
    Note that heads previously ensured that the current branch's head was
    included in the returned set (which made a difference for anonymous
    branches). This feature has been removed. In the future, the plan is
    to use OCaml's GC to track which anonymous branches are still being
    used and return all of them.
  • The internal stores (commit, node, etc) used to implement a full BC
    store are now created by the back-ends, not by Ir_bc. This allows
    back-ends to use their own APIs for this. In particular, back-ends
    can now share resources (such as a database connection) between
    stores. Internal stores no longer need to deal with config values
    at all.
  • Sync.create now takes a Repo.t, not a config, allowing
    Repo.config to be removed and allowing sharing of the back-end's
    internal state with the sync code. For example, the Git back-end
    no longer needs to create a new Git store object for sync.
  • Change type head to type commit_id. head was confusing because
    it applied to all commits, not just branch heads. Putting id in the
    name makes it clear that this is just data and (for example) holding
    an ID will not prevent the corresponding commit from being GC'd (once
    we have GC). of_head is now of_commit_id, task_of_head is now
    task_of_commit_id, Internals.commit_of_head is now
    Internals.commit_of_id and BC.Head is now BC.Hash.
  • Expose the Git compression level (#104, #298 by @samoht)
  • Add an optional config argument to all the backend's config
    functions. This allow the backends to composed more easily. (initial
    patch by @nasrallahmounir, integration by @samoht)
  • Add signatures for immutable link store, to store links between
    keys: Irmin.LINK and Irmin.LINK_MAKER. Add Irmin_mem.Link and
    Irmin_fs.Link which implement Irmin.LINK_MAKER in these backends
    (initial patch by @nasrallahmounir, integration by @samoht)
  • Add signatures for raw values (ie. whose values are of type
    Cstruct.t): Irmin.RAW and raw store maker: Irmin.AO_MAKER_RAW
    (initial patch by @nasrallahmounir, integration by @samoht)
  • Expose Irmin.Hash.digest_size (initial patch by @nasrallahmounir,
    integration by @samoht)
  • Expose /view to the REST API (#292, by @samoht)
  • Expose Irmin.Private.merge_node (#292 by @samoht)
  • Change the JSON stream API, which requres ezjsonm.0.4.2. (#266, #269,
    #273 by @samoht)
  • Fix a race when a lot of processes are trying to add a watch at the
    same time. (#270, #271, by @samoht)
  • Expose Irmin_git.Irmin_value_store functor. This provides the
    Irmin Contents/Node/Commit APIs on top of a Git-type store. This is
    useful for backends that want to store data using the Git object
    format, to be able to sync with Git, but without using Git's
    filesystem layout and locking. (#268 by @talex5)
  • Remove the first-class module API. It's confusing to duplicate the API
    (#293, by @talex5)