ocaml/dune

error message on failing copy action is unclear

Open

#11,506 opened on 2025年2月27日

GitHub で見る
 (1 comment) (0 reactions) (0 assignees)OCaml (478 forks)github user discovery
clihelp wanted

Repository metrics

Stars
 (1,882 stars)
PR merge metrics
 (平均マージ 1d 20h) (30d で 345 merged PRs)

説明

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

コントリビューターガイド