ocaml/dune

error message on failing copy action is unclear

Open

#11,506 建立於 2025年2月27日

在 GitHub 查看
 (1 留言) (0 反應) (0 負責人)OCaml (478 fork)github user discovery
clihelp wanted

倉庫指標

Star
 (1,882 star)
PR 合併指標
 (平均合併 1天 20小時) (30 天內合併 345 個 PR)

描述

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

貢獻者指南