ocaml/dune

error message on failing copy action is unclear

Open

#11,506 opened on Feb 27, 2025

View on GitHub
 (1 comment) (0 reactions) (0 assignees)OCaml (478 forks)github user discovery
clihelp wanted

Repository metrics

Stars
 (1,882 stars)
PR merge metrics
 (Avg merge 1d 20h) (345 merged PRs in 30d)

Description

To be fair this issue is visible because the rule wasn't written properly. There was no need for a with-stdout-to. But I suppose it can happen in other condition and the lack of details in the error message is really confusing.

Expected Behavior

dune should report exactly which action/command is creating an error.

~/Code/github/dune-demo/dune-empty-stdout-error$ cat dune
(rule (target f.json) (action (with-stdout-to %{target} (copy sub/file.json f.json))))
~/Code/github/dune-demo/dune-empty-stdout-error$ dune build
Error: open(_build/default/f.json): Permission denied
(rule (target f.json) (action (with-stdout-to %{target} (copy sub/file.json f.json))))
                                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
-> required by _build/default/f.json
-> required by alias all
-> required by alias default

Actual Behavior

The error message makes it hard to pinpoint exactly what rule and part of a rule is creating an error.

~/Code/github/dune-demo/dune-empty-stdout-error$ cat dune
(rule (target f.json) (action (with-stdout-to %{target} (copy sub/file.json f.json))))
~/Code/github/dune-demo/dune-empty-stdout-error$ dune build
Error: open(_build/default/f.json): Permission denied
-> required by _build/default/f.json
-> required by alias all
-> required by alias default

Here it's not clear if it's with-stdout-to or copy which fails (I'm guessing on copy but :shrug:)

Reproduction

https://github.com/Khady/dune-demo/tree/master/dune-empty-stdout-error

Specifications

  • Version of dune (output of dune --version): 3.17
  • Version of ocaml (output of ocamlc --version): 5.2
  • Operating system (distribution and version): debian

Contributor guide