Skip to content

Commit

Permalink
fix: make ignored rules fallback
Browse files Browse the repository at this point in the history
Fixes ocaml#8703

This is a lighter change than the original in ocaml#8518.

Signed-off-by: Etienne Millon <me@emillon.org>
  • Loading branch information
emillon committed Sep 20, 2023
1 parent b471b8a commit e1f578a
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 24 deletions.
5 changes: 3 additions & 2 deletions doc/changes/8518.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
- Ignore internal promote rules when `--ignore-promoted-rules` is set (#8518,
fix #8417, @rgrinberg)
- Turn internal promote rules into fallback rules when
`--ignore-promoted-rules` is set (#8518, #...., fix #8417, fix #8703,
@rgrinberg, @emillon)
36 changes: 17 additions & 19 deletions src/dune_rules/super_context.ml
Original file line number Diff line number Diff line change
Expand Up @@ -259,31 +259,29 @@ let extend_action t ~dir action =
;;

let make_rule t ?mode ?loc ~dir { Action_builder.With_targets.build; targets } =
match mode with
| Some mode when Rule_mode_decoder.is_ignored mode ~until_clean:`Keep -> None
| _ ->
let build = extend_action t build ~dir in
Some
(Rule.make
?mode
~info:(Rule.Info.of_loc_opt loc)
~context:(Some (Context.build_context (Env_tree.context t)))
~targets
build)
let (mode : Rule.Mode.t option) =
match mode with
| Some mode when Rule_mode_decoder.is_ignored mode ~until_clean:`Keep -> Some Fallback
| _ -> mode
in
let build = extend_action t build ~dir in
Rule.make
?mode
~info:(Rule.Info.of_loc_opt loc)
~context:(Some (Context.build_context (Env_tree.context t)))
~targets
build
;;

let add_rule t ?mode ?loc ~dir build =
match make_rule t ?mode ?loc ~dir build with
| None -> Memo.return ()
| Some rule -> Rules.Produce.rule rule
let rule = make_rule t ?mode ?loc ~dir build in
Rules.Produce.rule rule
;;

let add_rule_get_targets t ?mode ?loc ~dir build =
match make_rule t ?mode ?loc ~dir build with
| None -> Memo.return None
| Some rule ->
let+ () = Rules.Produce.rule rule in
Some rule.targets
let rule = make_rule t ?mode ?loc ~dir build in
let+ () = Rules.Produce.rule rule in
Some rule.targets
;;

let add_rules t ?loc ~dir builds = Memo.parallel_iter builds ~f:(add_rule ?loc t ~dir)
Expand Down
3 changes: 0 additions & 3 deletions test/blackbox-tests/test-cases/missing-opam-generated-file.t
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,3 @@ will overwrite `pkg.opam`. Now it does not update the file.
$ touch opam

$ dune build -p pkg @install
Error: No rule found for pkg.opam
-> required by alias install
[1]

0 comments on commit e1f578a

Please sign in to comment.