Releases: mirage/irmin
2.3.0
CHANGES:
Fixed
-
irmin-git
-
irmin-pack*
-
irmin*
-
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) -
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
-
irmin-unix
Added
-
irmin-layers (new):
- Created a new package,
irmin-layers
that includes common signatures for
layered stores. It contains a stubMake_layers
functor (#882, @icristescu)
- Created a new package,
-
irmin-bench (new):
-
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 inType.{encode_bin,decode_bin,size_of}
. Use
Type.Unboxed.<fn>
instead (#1030, @samoht) -
Type.v
now takes an extra mandatoryunit
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
andType.{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
anditer_nodes
functions to traverse the commits and
nodes graphs (#1077, @icristescu)
-
-
irmin-pack:
-
Added
index_throttle
option toIrmin_pack.config
, which exposes the
memory throttle feature ofIndex
inIrmin-Pack
. (#1049, @icristescu) -
Added
Pack.clear
andDict.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 toirmin-fsck
for reconstructing an index from
the command line (#1189, @zshipko) -
Added
integrity-check
command toirmin-fsck
for checking the integrity of
anirmin-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 causeppx_irmin
to derive
type representations using combinators in theFoo
module). (#1086,
@craigfe) -
Added an extension point
[typ: <core-type>]
for deriving type
representations inline. (#1087, @craigfe)
-
Changed
-
irmin
-
Replaced
Tree.pp_stats
with the type representationTree.stats_t
. (#TODO, @craigfe) -
Changed the JSON encoding of special floats.
Float.nan
,Float.infinity
andFloat.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 therepr
package. The
API ofIrmin.Type
is not changed. (#1106, @craigfe) -
Irmin.Type
uses staging forequal
,short_hash
andcompare
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
andTree.list
to take optionaloffset
andlength
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
toflush
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 tocheck-self-contained
command inChecks
(#1224, @zshipko)
-
-
ppx_irmin:
2.2.0
CHANGES:
Added
-
irmin:
-
ppx_irmin
Changed
-
irmin:
-
Add sanity checks when creating
Irmin.Type
records, variants and enums
(#956 and #966, @liautaud):Irmin.Type.{sealr,sealv,enum}
will now raiseInvalid_argument
if two
components have the same name;Irmin.Type.{field,case0,case1}
will now raiseInvalid_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 asnull
;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 intox
.
-
Changed pretty-printing of Irmin types to more closely resemble OCaml types.
e.g.pair int string
prints asint * 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
Fixed
2.1.0
CHANGES:
Added
-
ppx_irmin (new):
- Created a new package,
ppx_irmin
, which provides a PPX deriving plugin
for generating Irmin generics.
- Created a new package,
-
irmin-unix:
-
irmin:
- Added
Irmin.Hash.Make_BLAKE2B
andIrmin.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)
- Added
Changed
2.0.0
CHANGES:
Added
-
irmin-pack (new):
- Created a new Irmin backend,
irmin-pack
, which uses a space-optimised
on-disk format.
- Created a new Irmin backend,
-
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, agraphql
command has been added to the command-line
interface for startingirmin-graphql
servers. (#558, @andreas, @zshipko) -
Contents can now be queried directly using
irmin-graphql
with
Irmin_graphql.Server.Make_ext
and theIrmin_graphql.Server.PRESENTER
interface. (#643, @andreas)
-
-
irmin-test (new):
-
irmin-unix:
-
irmin-git:
-
irmin-http:
-
irmin:
-
Add
Json_value
andJson
content types. (#516 #694, @zshipko) -
Add optional seed parameter to the
Irmin.Type
generic hash functions.
(#712, @samoht) -
Add
V1
submodules inCommit
,Contents
andHash
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 astats
function returning the number of held
locks. (#704, @samoht)
-
Changed
-
irmin-unix:
-
irmin-git:
-
irmin-http:
-
irmin-mirage
-
irmin:
-
Update to use dune (#534, @samoht) and opam 2.0. (#583, @samoht)
-
Replace
Irmin.Contents.S0
withIrmin.Type.S
. -
Rename
Type.pre_digest
->Type.pre_hash
andType.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 newIrmin.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 newStore.set_exn
with the previous exception-raising behaviour. (#572, @samoht) -
Rename store module types to be more descriptive:
-
Rename
export_tree
tosave_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
toStore.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 theFS
backend). (#845, @samoht) -
Simplify
Private.Node.Make
parameters to use a simpler notion of 'path' in
terms of a list of steps. (#645, @samoht)
-
Fixed
-
irmin-unix:
-
irmin-git:
-
irmin-http:
-
irmin:
Removed
1.4.0
1.3.3
1.3.2
1.3.1
1.3.0
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 use
jbuilder`
(#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
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