Irmin is a distributed database that follows the same design principles as Git
CHANGES:
irmin-pack
ppx_irmin
. (#1782, @hhugo)irmin-unix
push
, pull
, fetch
and
clone
(#1776, @zshipko)Mimic.ctx
. A
side-effect of this update is that the remote
function now returns an Lwt
promise. (#1778, @zshipko)libirmin
package providing a C interface to the irmin API
(#1713, @zshipko)CHANGES:
irmin
Irmin.Tree
objects to use the
comparison defined on hashes. The previous implementation was unstable.
(#1519, @CraigFe)irmin-pack
irmin-unix
irmin
Read_only.S
and Read_only.Maker
module types (#1343, @samoht)close
and batch
functions (#1345, @samoht)close
function
(#1345, @samoht)Store.Tree.singleton
for building trees with a single
contents binding. (#1567, @CraigFe)with_handler
and head
to Store.Backend.Node
and
Store.Backend.Node_portable
to work with recursive node structures from
irmin core. (#1712, #1746 @Ngoguey42). Forward
port of #1692 and #1670.proof
, to_proof
and of_proof
to Store.Backend.Node_portable
(#1716, @Ngoguey42). Forward port from #1583.hash_exn
to Store.Backend.Node.Val
and Store.Backend.Node_portable
(#TODO, @Ngoguey42) Forward ported from #1741.Store.Tree.kinded_hash
function. (#1767, @Ngoguey) Forward ported
from #1625.Contents.String_v2
, Node.Generic_key.Make_v2
and
Commit.Generic_key.Make_v2
for backward compatibility with older stores.
(#1715, @icristescu)irmin-bench
irmin-mem
Irmin_mem.Content_addressable
(#1369, @samoht)irmin-pack
stat-store
command to irmin-fsck
to output stats on the tree
under a specified commit (#1391, @icristescu, @Ngoguey42, @CraigFe).Stats
(#1570, @Ngoguey42).irmin-unix
irmin
CLI to raise an exception when an invalid/non-existent
config file is specified (#1413, @zshipko)--commit
flag to CLI to load a store from a specific commit hash
(#1721, @zshipko)irmin-tezos
tezos-context.encoding
library.
That'll simplify building benchmarks and custom tools (#1579, @samoht)irmin
Irmin.Sync
is now a namespace: use Irmin.Sync.Make(S)
instead of
Irmin.Sync(S)
(#1338, @samoht)
Irmin.Private
is now Irmin.Backend
(#1530, @CraigFe)
Store.master
is now Store.main
. The existing Store.master
function is
deprecated and will be removed in a future release. (#1564, @CraigFe)
Store.Private
is now Store.Backend
(#1530, @CraigFe)
Store.Private.Sync
is now Store.Backend.Remote
(#1338, @samoht)
Irmin.Branch.S.master
is now Irmin.Branch.S.main
(#1564, @CraigFe)
Irmin.Private.{Commit,Node}
are now Irmin.{Node,Commit}
. (#1471,
@CraigFe)
All module types are now using snake-case and are not capitalized anymore. (#1341, @samoht)
Move signatures for backend stores into their own modules. All the
X_STORE
sigs have moved to X.S
:
APPEND_ONLY_STORE
is now Append_only.S
CONTENT_ADDRESSABLE_STORE
is now Content_addressable.S
ATOMIC_WRITE_STORE
is now Irmin.Atomic_write.S
And all the X_STORE_MAKER
have moved to X.Maker
:APPEND_ONLY_STORE_MAKER
is now Append_only.Maker
CONTENT_ADDRESSABLE_STORE_MAKER
is now Content_addressable.Maker
ATOMIC_WRITE_STORE_MAKER
is now Atomic_write.Maker
This gives some space to move convenient functors closer to where they
belong:Content_addressable
is now Content_addressable.Make
Content_adddressable.Check_closed
and Atomic_write.Check_closed
(#1342, @samoht)Rename Irmin.Make
into Irmin.Maker
; stage its result to return
Make
functor once provided with a content-addressable and an
atomic-writes stores (#1369, @samoht)
Rename Irmin.Make_ext
into Irmin.Maker_ext
; stage its result to
return Make
functor once provided with a content-addressable and an
atomic-writes stores, as well as node and commit makers (#1369, @samoht)
Require at least lwt.5.3.0
to use Lwt.Syntax
in the codebase
(#1401, @samoht)
Info
implementations are not part of store: use S.Info.v
instead of Irmin.Info.v
(#1400, @samoht)
Rename Commit.V1
to Commit.V1.Make
. This functor now takes separate
hash and key implementations as arguments. (#1431 #1634, @CraigFe
@icristescu)
Introduce a Schema
module to hold all the types that users can
define in an Irmin store. Use this as a parameter to every Maker
functor. This is a large change which touches all the backends.
(#1470, @samoht, @CraigFe)
Add Irmin.Backend.Conf.Schema
for grouping configuration keys. Now
Irmin.Backend.Conf.key
takes an additional ~spec
parameter.
(#1492, @zshipko)
Tree.empty
and Node.empty
now both take a unit argument. (#1566 #1629,
@CraigFe)
Rename key
type to path
and Key
module to Path
when it is in a path
context in Tree
and Store
. (#1569, @maiste)
Move Node.default
metadata default values into a Node.Metadata.default
to give room for other metadata values (#1611, @samoht)
Add support for non-content-addressed ("generic key") backend stores. This allows Irmin to work with backends in which not all values are addressed by their hash. In particular, this includes:
Store.{Commit,Contents,Tree}.of_key
.Irmin.{Node,Commit}.Generic_key
modules.Node.Portable
and
Commit.Portable
.Irmin.Indexable.S
.
(#1510 #1647, @CraigFe)Cache hits in several Tree
functions are more frequent than before.
(#1724, @Ngoguey42, @CraigFe)
Add a new Pruned_hash
tag to the error case of several Store.Tree
functions (#1744 @Ngoguey42). Forward ported from #1583.
irmin-containers
Irmin_containers.Store_maker
; this is now equivalent to
Irmin.Content_addressable.S
(#1369, @samoht)Irmin_containers.CAS_maker
to
Irmin_containers.Content_addressable
(#1369, @samoht)irmin-fs
Irmin_fs.Make
into Irmin_fs.Maker
(#1369, @samoht)Irmin_fs.Make_ext
into Irmin_fs.Maker_ext
(#1369, @samoht)irmin-git
Irmin_git.root
is now Irmin_git.Conf.root
Irmin_git.head
is now Irmin_git.Conf.head
Irmin_git.bare
is now Irmin_git.Conf.bare
Irmin_git.level
is now Irmin_git.Conf.level
Irmin_git.buffers
is now Irmin_git.Conf.buffers
Irmin_git.dot_git
is now Irmin_git.Conf.dot_git
(#1347, @samoht)Irmin_git.Make
into Irmin_git.Maker
(#1369, @samoht)git.3.7.0
in the codebase (#1632, @dinosaure)irmin-graphql:
master
to main
in the
GraphQL API. (#1564, @CraigFe)Key
type is now called Path
to match the new name in irmin
key
fields and parameters have been renamed to path
(#1618, @zshipko)irmin-mirage
Irmin_mirage_git.Make
into Irmin_mirage_git.Maker
(#1369, @samoht)irmin-pack
Irmin_pack.Maker
module type now no longer takes a Conf
argument.
(#1641, @CraigFe)Conf.S
requires a new parameter
contents_length_header
that (optionally) further specifies the encoding
format used for commits in order to improve performance. (#1644, @CraigFe)irmin-pack.2.x
versions, but not
forwards compatible. (#1649 #1655, @CraigFe @Ngoguey42)irmin-unix
Irmin_unix.Resolver.load_config
and make command line options
take precedence over config options.
(#1464, #1543, #1607 @zshipko)Irmin_unix.Resolver.destruct
has been removed (and partially replaced by
Resolver.spec
). (#1603, @CraigFe)irmin
CLI to support empty path in list
subcommand.
(#1575, @maiste)branches
for listing available branches and
log
which is similar to git log
(#1609, #1727, @zshipko)irmin watch
to take parameters to specify a command that should
be executed when there are new changes (#1608, @zshipko)irmin-pack
irmin-pack.layered
library. Support for the layered store
will be restored on a future release of irmin-pack
. (#1651, @CraigFe)clear
operation in irmin-pack
. This operation
is incompatible with performance optimisations made in this release.
(#1655, @CraigFe)irmin-layers
CHANGES:
Fixed a bug causing stream proof extender nodes to have their segments be returned in reverse order (i.e. bottom to top, rather then top-down). (#1742, @CraigFe)
Fixed a bug that allowed the creation of overly-large stable inodes via stream proofs. (#1741, @Ngoguey42)
Store.Private.Node.Val.hash_exn
(#1741, @Ngoguey42)CHANGES:
CHANGES:
irmin
irmin-pack
Repo.close
(#1707, @zshipko)irmin
Tree.produce_proof
and Tree.verify_proof
to produce and verify
proofs from complex computations. produce_proof
and verify_proof
takes a callback over tree and instead of a static list of operations
-- this now means that the full Tree
API can now be used in proofs,
including sub-tree operations, folds and paginated lists
(#1625, #1663, #1683, @samoht, @Ngoguey42)Tree.produce_stream
and Tree.verify_stream
to produce and
verify stream proofs (#1684, #1692, #1691, @samoht, @Ngoguey42, @icristescu)irmin-pack
irmin-unix
tezos
store type for irmin
command-line (#1678, @zshipko)irmin
Tree.Proof.of_keys
. Use Tree.produce_proof
instead
(#1625, @samoht)Tree.empty
now takes a unit argument. (#1566, @CraigFe)Tree.length
now takes a tree as argument (#1676, @samoht)Tree.Proof.t
now uses a more precise datatype to encode value
invariants (#1688, @samoht)irmin-pack
irmin-git
git.3.7.0
in the codebase (#1637, @dinosaure)CHANGES:
CHANGES:
Tree
operations now raise a Dangling_hash
exception when called with a
path that contains dangling hashes in the underlying store, rather than
interpreting such paths as ending with empty nodes (#1477, @CraigFe)Tree.export
where nodes could be exported before
some of their contents, resulting in indirect hashes in irmin-pack
(#1508, @Ngoguey42)Node.seq
and Node.of_seq
are added to avoid allocating intermediate
lists when it is not necessary (#1508, @samoht)cache
parameter to Tree.hash
, Tree.Contents.hash
,
Tree.list
, Node.list
, Node.seq
and Node.find
to control the storing
of lazily loaded data (#1526, @Ngoguey42)Node.clear
to clear internal caches (#1526, @Ngoguey42)tree
argument to Tree.fold
to manipulate the subtrees (#1527,
@icristescu, @Ngoguey42)Store.Tree.pruned
for building purely in-memory tree
objects with known hashes. (#1537, @CraigFe)order
argument to specify the order of traversal in Tree.fold
(#1548, @icristescu, @CraigFe)irmin
Node.v
is renamed to Node.of_list
(#1508, @samoht)Tree.export
in order to minimise the memory footprint.
(#1508, @Ngoguey42)~force:`And_clear
case parameter from Tree.fold
,
~force:`True ~cache:false
is the new equivalent. (#1526, @Ngoguey42) `Tree.fold ~force:`True
and `Tree.fold ~force:`False
don't
cache the lazily loaded data any more. Pass ~cache:true
to enable it
again. (#1526, @Ngoguey42)Irmin.Tree.clear
(#1515, @samoht)irmin-git
irmin-git
to git.3.5.0
. (#1495, @dinosaure)