2026-03-09 16:08.47: New job: test mirage/irmin https://github.com/mirage/irmin.git#refs/pull/2390/head (57ba56d9180c5b3f0cdb83556c48323a8742df48) (linux-x86_64:(lint-fmt)) Base: ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7 ocamlformat version: version 0.28.1 (from opam) To reproduce locally: git clone --recursive "https://github.com/mirage/irmin.git" && cd "irmin" && git fetch origin "refs/pull/2390/head" && git reset --hard 57ba56d9 cat > Dockerfile <<'END-OF-DOCKERFILE' FROM ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7 USER 1000:1000 RUN cd ~/opam-repository && (git cat-file -e 302e116c4009da2f5a31c350a57c8b3c9b27289e || git fetch origin master) && git reset -q --hard 302e116c4009da2f5a31c350a57c8b3c9b27289e && git log --no-decorate -n1 --oneline && opam update -u RUN opam depext -i dune WORKDIR /src RUN opam depext -i ocamlformat=0.28.1 COPY --chown=1000:1000 . /src/ RUN opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2) END-OF-DOCKERFILE docker build . END-REPRO-BLOCK 2026-03-09 16:08.47: Using cache hint "mirage/irmin-ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7-debian-13-4.08_opam-2.5-ocamlformat-302e116c4009da2f5a31c350a57c8b3c9b27289e" 2026-03-09 16:08.47: Using OBuilder spec: ((from ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7) (user (uid 1000) (gid 1000)) (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "cd ~/opam-repository && (git cat-file -e 302e116c4009da2f5a31c350a57c8b3c9b27289e || git fetch origin master) && git reset -q --hard 302e116c4009da2f5a31c350a57c8b3c9b27289e && git log --no-decorate -n1 --oneline && opam update -u")) (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam depext -i dune")) (workdir /src) (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam depext -i ocamlformat=0.28.1")) (copy (src .) (dst /src/)) (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)")) ) 2026-03-09 16:08.47: Waiting for resource in pool OCluster 2026-03-09 16:08.47: Waiting for worker… 2026-03-09 16:08.47: Got resource from pool OCluster Building on laodoke.caelum.ci.dev HEAD is now at 1e565a8b1f Formatting HEAD is now at 57ba56d918 Formatting (from ocaml/opam:debian-13-ocaml-4.08@sha256:016974eca0405838af73274ed51d1a69a31f37211486cd4f5dfedd706192cce7) 2026-03-09 16:08.49 ---> using "8e880d54b82285cc07797680056d2282ee7dd8d645150afdce9c0dfbe68786cc" from cache /: (user (uid 1000) (gid 1000)) /: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "cd ~/opam-repository && (git cat-file -e 302e116c4009da2f5a31c350a57c8b3c9b27289e || git fetch origin master) && git reset -q --hard 302e116c4009da2f5a31c350a57c8b3c9b27289e && git log --no-decorate -n1 --oneline && opam update -u")) From https://github.com/ocaml/opam-repository * branch master -> FETCH_HEAD 340ee6fd1f..325491a76d master -> origin/master 302e116c40 Merge pull request #29374 from shonfeder/release-dune-3.21.1 <><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><> [default] Initialised default (at git+file:///home/opam/opam-repository): [INFO] opam 2.1 and 2.2 include many performance and security improvements over 2.0; please consider upgrading (https://opam.ocaml.org/doc/Install.html) Everything as up-to-date as possible (run with --verbose to show unavailable upgrades). However, you may "opam upgrade" these packages explicitly, which will ask permission to downgrade or uninstall the conflicting packages. Nothing to do. # Run eval $(opam env) to update the current shell environment 2026-03-09 16:08.49 ---> using "b08ff0ee2b029d47ebd63fda058aa6322a9ef2a1ca63d0b41e317156fad9ff84" from cache /: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam depext -i dune")) # Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian # No extra OS packages requirements found. # All required OS packages found. # Now letting opam install the packages The following actions will be performed: - install dune 3.21.1 <><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><> [dune.3.21.1] found in cache <><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><> -> installed dune.3.21.1 Done. # Run eval $(opam env) to update the current shell environment 2026-03-09 16:08.49 ---> using "ecc6dc342ae71659e951fc3d7f3b0f8bae5f117e98a01e439731b1eb512382b0" from cache /: (workdir /src) /src: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam depext -i ocamlformat=0.28.1")) # Detecting depexts using vars: arch=x86_64, os=linux, os-distribution=debian, os-family=debian # No extra OS packages requirements found. # All required OS packages found. # Now letting opam install the packages The following actions will be performed: - install sexplib0 v0.14.0 [required by base] - install ocamlbuild 0.16.1 [required by fpath, astring, uuseg] - install either 1.0.0 [required by ocamlformat-lib] - install menhirLib 20260209 [required by ocamlformat-lib] - install dune-build-info 3.21.1 [required by ocamlformat-lib] - install csexp 1.5.2 [required by ocamlformat] - install menhirSdk 20260209 [required by ocamlformat-lib] - install menhirGLR 20260209 [required by menhir] - install camlp-streams 5.0.1 [required by ocamlformat-lib] - install seq base [required by re] - install fix 20250919 [required by ocamlformat-lib] - install ocamlfind 1.9.8 [required by ocp-indent, astring, fpath, uuseg] - install ocaml-version 4.0.3 [required by ocamlformat-lib] - install cmdliner 2.1.0 [required by ocamlformat] - install menhirCST 20260209 [required by menhir] - install dune-configurator 3.21.1 [required by base] - install re 1.11.0 [required by ocamlformat] - install topkg 1.1.1 [required by fpath, astring, uuseg] - install ocp-indent 1.9.0 [required by ocamlformat-lib] - install menhir 20260209 [required by ocamlformat-lib] - install base v0.14.3 [required by ocamlformat-lib] - install uutf 1.0.4 [required by ocamlformat-lib] - install astring 0.8.5 [required by ocamlformat-lib] - install stdio v0.14.0 [required by ocamlformat-lib] - install uucp 15.0.0 [required by uuseg] - install fpath 0.7.3 [required by ocamlformat-lib] - install uuseg 15.0.0 [required by ocamlformat-lib] - install ocamlformat-lib 0.28.1 [required by ocamlformat] - install ocamlformat 0.28.1 ===== 29 to install ===== <><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><> [astring.0.8.5] found in cache [base.v0.14.3] found in cache [camlp-streams.5.0.1] found in cache [cmdliner.2.1.0] found in cache [csexp.1.5.2] found in cache [dune-build-info.3.21.1] found in cache [dune-configurator.3.21.1] found in cache [either.1.0.0] found in cache [fix.20250919] found in cache [fpath.0.7.3] found in cache [menhir.20260209] found in cache [menhirCST.20260209] found in cache [menhirGLR.20260209] found in cache [menhirLib.20260209] found in cache [menhirSdk.20260209] found in cache [ocaml-version.4.0.3] found in cache [ocamlbuild.0.16.1] found in cache [ocamlfind.1.9.8] found in cache [ocamlformat.0.28.1] found in cache [ocamlformat-lib.0.28.1] found in cache [ocp-indent.1.9.0] found in cache [re.1.11.0] found in cache [sexplib0.v0.14.0] found in cache [stdio.v0.14.0] found in cache [topkg.1.1.1] found in cache [uucp.15.0.0] found in cache [uuseg.15.0.0] found in cache [uutf.1.0.4] found in cache <><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><> -> installed seq.base -> installed camlp-streams.5.0.1 -> installed csexp.1.5.2 -> installed either.1.0.0 -> installed fix.20250919 -> installed cmdliner.2.1.0 -> installed menhirCST.20260209 -> installed menhirGLR.20260209 -> installed menhirLib.20260209 -> installed menhirSdk.20260209 -> installed ocaml-version.4.0.3 -> installed re.1.11.0 -> installed sexplib0.v0.14.0 -> installed dune-build-info.3.21.1 -> installed dune-configurator.3.21.1 -> installed ocamlfind.1.9.8 -> installed ocamlbuild.0.16.1 -> installed ocp-indent.1.9.0 -> installed base.v0.14.3 -> installed menhir.20260209 -> installed topkg.1.1.1 -> installed stdio.v0.14.0 -> installed uutf.1.0.4 -> installed astring.0.8.5 -> installed fpath.0.7.3 -> installed uucp.15.0.0 -> installed uuseg.15.0.0 -> installed ocamlformat-lib.0.28.1 -> installed ocamlformat.0.28.1 Done. <><> ocp-indent.1.9.0 installed successfully ><><><><><><><><><><><><><><><><><> => This package requires additional configuration for use in editors. Install package 'user-setup', or manually: * for Emacs, add these lines to ~/.emacs: (add-to-list 'load-path "/home/opam/.opam/4.08/share/emacs/site-lisp") (require 'ocp-indent) * for Vim, add this line to ~/.vimrc: set rtp^="/home/opam/.opam/4.08/share/ocp-indent/vim" # Run eval $(opam env) to update the current shell environment 2026-03-09 16:09.43 ---> saved as "5bd5c38c9bd7c6e28df7f0a29ad6b8aecee5d6d63694a0a64c17b9eabec41dcd" /src: (copy (src .) (dst /src/)) 2026-03-09 16:09.44 ---> saved as "3ba5bdc25c070101e9c1d34a1fb209df238513ac50c66828f2502b2618a8ce5f" /src: (run (shell "opam exec -- dune build @fmt --ignore-promoted-rules || (echo \"dune build @fmt failed\"; exit 2)")) Warning: Invalid documentation comment: File "src/irmin-pack/layout.ml", line 97, characters 27-50: '{v ... v}' (verbatim text) should begin on its own line. Warning: Invalid documentation comment: File "src/irmin-pack/layout.ml", line 97, characters 50-51: Paragraph should begin on its own line. Warning: Invalid documentation comment: File "test/irmin-graphql/common.mli", line 88, character 16 to line 92, character 6: '{[...]}' (code block) should begin on its own line. Warning: Invalid documentation comment: File "test/irmin-graphql/common.mli", line 98, character 16 to line 102, character 6: '{[...]}' (code block) should begin on its own line. Warning: Invalid documentation comment: File "test/irmin-graphql/common.mli", line 104, character 24 to line 108, character 6: '{[...]}' (code block) should begin on its own line. Warning: Invalid documentation comment: File "test/irmin-graphql/common.mli", line 114, character 16 to line 118, character 6: '{[...]}' (code block) should begin on its own line. File "src/irmin/node.ml", line 1, characters 0-0: diff --git a/_build/default/src/irmin/node.ml b/_build/default/src/irmin/.formatted/node.ml index 2d0f1fd..c4bb9d4 100644 --- a/_build/default/src/irmin/node.ml +++ b/_build/default/src/irmin/.formatted/node.ml @@ -163,9 +163,9 @@ struct |~ case1 "contents" contents_key_t (fun h -> `Contents (h, Metadata.default)) |~ case1 "contents-x" (pair contents_key_t Metadata.t) (fun (h, m) -> - `Contents (h, m)) + `Contents (h, m)) |~ case1 "contents-inlined" (pair string Metadata.t) (fun (v, m) -> - `Contents_inlined (v, m)) + `Contents_inlined (v, m)) |> sealv let to_entry (k, (v : value)) = @@ -295,34 +295,32 @@ struct let entries : Hash_preimage.t = StepMap.to_seq t |> Seq.map (fun (_, v) -> - match v with - (* Weaken keys to hashes *) - | Node { name; node; inlined } -> - Hash_preimage.Node_hash - { - name; - node = Node_key.to_hash node; - inlined = List.map Contents_key.to_hash inlined; - } - | Contents { name; contents } -> - Contents_hash - { name; contents = Contents_key.to_hash contents } - | Contents_m { metadata; name; contents } -> - Contents_m_hash - { metadata; name; contents = Contents_key.to_hash contents } - | Node_hash { name; node; inlined } -> - Node_hash { name; node; inlined } - | Contents_hash { name; contents } -> - Contents_hash { name; contents } - | Contents_m_hash { metadata; name; contents } -> - Contents_m_hash { metadata; name; contents } - | Contents_inlined { name; contents } -> - Contents_inlined_hash - { name; contents = Contents_key.to_hash contents } - | Contents_inlined_hash { name; contents } -> - Contents_inlined_hash { name; contents } - | Contents_inlined_value { name; value; metadata } -> - Contents_inlined_value { name; value; metadata }) + match v with + (* Weaken keys to hashes *) + | Node { name; node; inlined } -> + Hash_preimage.Node_hash + { + name; + node = Node_key.to_hash node; + inlined = List.map Contents_key.to_hash inlined; + } + | Contents { name; contents } -> + Contents_hash { name; contents = Contents_key.to_hash contents } + | Contents_m { metadata; name; contents } -> + Contents_m_hash + { metadata; name; contents = Contents_key.to_hash contents } + | Node_hash { name; node; inlined } -> + Node_hash { name; node; inlined } + | Contents_hash { name; contents } -> Contents_hash { name; contents } + | Contents_m_hash { metadata; name; contents } -> + Contents_m_hash { metadata; name; contents } + | Contents_inlined { name; contents } -> + Contents_inlined_hash + { name; contents = Contents_key.to_hash contents } + | Contents_inlined_hash { name; contents } -> + Contents_inlined_hash { name; contents } + | Contents_inlined_value { name; value; metadata } -> + Contents_inlined_value { name; value; metadata }) |> Seq.fold_left (fun xs x -> x :: xs) [] in pre_hash entries f @@ -844,8 +842,8 @@ module V1 (N : Generic_key.S with type step = string) = struct | `Contents (_, x) when not (is_default x) -> Some x | _ -> None) |+ field "node" (option Node_key.t) (function - | `Node (n, _) -> Some n - | _ -> None) + | `Node (n, _) -> Some n + | _ -> None) |> sealr let t : t Type.t = File "src/irmin-pack/io/store.ml", line 1, characters 0-0: diff --git a/_build/default/src/irmin-pack/io/store.ml b/_build/default/src/irmin-pack/io/.formatted/store.ml index e6f974e..9dca7b9 100644 --- a/_build/default/src/irmin-pack/io/store.ml +++ b/_build/default/src/irmin-pack/io/.formatted/store.ml @@ -576,12 +576,12 @@ struct let () = preds |> List.filter_map (function - | s, `Contents h -> Some (s, `Contents (XKey.to_hash h)) - | s, `Inode h -> Some (s, `Inode (XKey.to_hash h)) - | s, `Node (h, _il) -> Some (s, `Node (XKey.to_hash h)) - | _, `Contents_inlined _ -> - (* Inlined contents don't have their own key *) - None) + | s, `Contents h -> Some (s, `Contents (XKey.to_hash h)) + | s, `Inode h -> Some (s, `Inode (XKey.to_hash h)) + | s, `Node (h, _il) -> Some (s, `Node (XKey.to_hash h)) + | _, `Contents_inlined _ -> + (* Inlined contents don't have their own key *) + None) |> Stats.visit_node t (XKey.to_hash k) ~width ~nb_children in List.filter_map File "src/irmin-graphql/server.ml", line 1, characters 0-0: diff --git a/_build/default/src/irmin-graphql/server.ml b/_build/default/src/irmin-graphql/.formatted/server.ml index e1acb20..3dd871d 100644 --- a/_build/default/src/irmin-graphql/server.ml +++ b/_build/default/src/irmin-graphql/.formatted/server.ml @@ -427,17 +427,15 @@ struct ~resolve:(fun _ (tree, tree_path) -> Store.Tree.list tree Store.Path.empty |> List.map (fun (step, tree) -> - let absolute_path = - Store.Path.rcons tree_path step - in - match Store.Tree.destruct tree with - | `Contents (c, m) -> - let c = Store.Tree.Contents.force_exn c in - let f = Lazy.force contents_as_node in - f (c, m, absolute_path) - | `Node _ -> - let f = Lazy.force tree_as_node in - f (tree, absolute_path))); + let absolute_path = Store.Path.rcons tree_path step in + match Store.Tree.destruct tree with + | `Contents (c, m) -> + let c = Store.Tree.Contents.force_exn c in + let f = Lazy.force contents_as_node in + f (c, m, absolute_path) + | `Node _ -> + let f = Lazy.force tree_as_node in + f (tree, absolute_path))); ])) in let branch = File "src/irmin/tree.ml", line 1, characters 0-0: diff --git a/_build/default/src/irmin/tree.ml b/_build/default/src/irmin/.formatted/tree.ml index 09187c5..4d677b9 100644 --- a/_build/default/src/irmin/tree.ml +++ b/_build/default/src/irmin/.formatted/tree.ml @@ -1020,19 +1020,19 @@ module Make (P : Backend.S) = struct let must_build_portable_node = bindings |> Seq.exists (fun (_, v) -> - match v with - | `Node (n, _il) -> Option.is_none (cached_key n) - | `Contents (c, _) -> Option.is_none (Contents.cached_key c)) + match v with + | `Node (n, _il) -> Option.is_none (cached_key n) + | `Contents (c, _) -> Option.is_none (Contents.cached_key c)) in if must_build_portable_node then let pnode = let seq = bindings |> Seq.map (fun (step, v) -> - match v with - | `Contents (c, m) -> (step, `Contents (Contents.hash c, m)) - | `Node (n, _il) -> - hash ~cache n (fun k -> (step, `Node (k, [])))) + match v with + | `Contents (c, m) -> (step, `Contents (Contents.hash c, m)) + | `Node (n, _il) -> + hash ~cache n (fun k -> (step, `Node (k, [])))) in Portable.of_seq seq [] in @@ -1042,19 +1042,19 @@ module Make (P : Backend.S) = struct let seq = bindings |> Seq.map (fun (step, v) -> - match v with - | `Contents (c, m) -> ( - match Contents.cached_key c with - | Some k -> (step, `Contents (k, m)) - | None -> - (* We checked that all child keys are cached above *) - assert false) - | `Node (n, _il) -> ( - match cached_key n with - | Some k -> (step, `Node (k, [])) - | None -> - (* We checked that all child keys are cached above *) - assert false)) + match v with + | `Contents (c, m) -> ( + match Contents.cached_key c with + | Some k -> (step, `Contents (k, m)) + | None -> + (* We checked that all child keys are cached above *) + assert false) + | `Node (n, _il) -> ( + match cached_key n with + | Some k -> (step, `Node (k, [])) + | None -> + (* We checked that all child keys are cached above *) + assert false)) in P.Node.Val.of_seq seq [] in @@ -2287,29 +2287,29 @@ module Make (P : Backend.S) = struct Atomic.incr cnt.node_val_v; StepMap.to_seq x |> Seq.filter_map (fun (step, v) -> - match v with - | `Node (n, _il) -> ( - match Node.cached_key n with - | Some k -> Some (step, `Node (k, [])) - | None -> - assertion_failure - "Encountered child node value with uncached key \ - during export:@,\ - @ @[%a@]" - dump v) - | `Contents (c, m) -> ( - (* Check if contents should be inlined at export time *) - match should_inline_contents c with - | Some bytes -> Some (step, `Contents_inlined (bytes, m)) - | None -> ( - match Contents.cached_key c with - | Some k -> Some (step, `Contents (k, m)) - | None -> - assertion_failure - "Encountered child contents value with uncached \ - key during export:@,\ - @ @[%a@]" - dump v))) + match v with + | `Node (n, _il) -> ( + match Node.cached_key n with + | Some k -> Some (step, `Node (k, [])) + | None -> + assertion_failure + "Encountered child node value with uncached key during \ + export:@,\ + @ @[%a@]" + dump v) + | `Contents (c, m) -> ( + (* Check if contents should be inlined at export time *) + match should_inline_contents c with + | Some bytes -> Some (step, `Contents_inlined (bytes, m)) + | None -> ( + match Contents.cached_key c with + | Some k -> Some (step, `Contents (k, m)) + | None -> + assertion_failure + "Encountered child contents value with uncached key \ + during export:@,\ + @ @[%a@]" + dump v))) in let _, to_inline = List.split to_inline in let node = P.Node.Val.of_seq node_seq to_inline in dune build @fmt failed "/usr/bin/env" "bash" "-c" "opam exec -- dune build @fmt --ignore-promoted-rules || (echo "dune build @fmt failed"; exit 2)" failed with exit status 2 2026-03-09 16:09.47: Job failed: Failed: Build failed