From e1f578a46d6db251e5bb373a94b482ecfc721cf8 Mon Sep 17 00:00:00 2001 From: Etienne Millon Date: Tue, 19 Sep 2023 15:47:26 +0200 Subject: [PATCH] fix: make ignored rules fallback Fixes #8703 This is a lighter change than the original in #8518. Signed-off-by: Etienne Millon --- doc/changes/8518.md | 5 +-- src/dune_rules/super_context.ml | 36 +++++++++---------- .../test-cases/missing-opam-generated-file.t | 3 -- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/doc/changes/8518.md b/doc/changes/8518.md index 42978c2b9ff..0d7c4820d27 100644 --- a/doc/changes/8518.md +++ b/doc/changes/8518.md @@ -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) diff --git a/src/dune_rules/super_context.ml b/src/dune_rules/super_context.ml index a67684a5946..5fcd152df5f 100644 --- a/src/dune_rules/super_context.ml +++ b/src/dune_rules/super_context.ml @@ -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) diff --git a/test/blackbox-tests/test-cases/missing-opam-generated-file.t b/test/blackbox-tests/test-cases/missing-opam-generated-file.t index b532150a5b0..c37605c6026 100644 --- a/test/blackbox-tests/test-cases/missing-opam-generated-file.t +++ b/test/blackbox-tests/test-cases/missing-opam-generated-file.t @@ -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]