Skip to content

Commit 939a015

Browse files
authored
Merge pull request #11955 from Alizter/fix-alias-stanza-empty
test: empty alias in alias stanza
2 parents 0da3230 + c007936 commit 939a015

File tree

2 files changed

+52
-16
lines changed

2 files changed

+52
-16
lines changed

src/dune_rules/simple_rules.ml

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,23 @@ open Import
22
open Memo.O
33

44
module Alias_rules = struct
5+
let check_empty ~loc ~dir alias =
6+
match Alias.Name.compare (Alias.name alias) Alias0.empty with
7+
| Lt | Gt -> Memo.return ()
8+
| Eq ->
9+
let* project = Dune_load.find_project ~dir in
10+
if Dune_project.dune_version project >= (3, 20)
11+
then
12+
User_error.raise
13+
~loc
14+
[ Pp.text "User-defined rules cannot be added to the 'empty' alias" ]
15+
else Memo.return ()
16+
;;
17+
518
let add sctx ~alias ~loc build =
619
let dir = Alias.dir alias in
7-
let* () =
8-
match Alias.Name.compare (Alias.name alias) Alias0.empty with
9-
| Lt | Gt -> Memo.return ()
10-
| Eq ->
11-
let* project = Dune_load.find_project ~dir in
12-
if Dune_project.dune_version project >= (3, 20)
13-
then
14-
User_error.raise
15-
~loc
16-
[ Pp.text "User-defined rules cannot be added to the 'empty' alias" ]
17-
else Memo.return ()
18-
in
19-
Super_context.add_alias_action sctx alias ~dir ~loc build
20+
check_empty ~loc ~dir alias
21+
>>> Super_context.add_alias_action sctx alias ~dir ~loc build
2022
;;
2123

2224
let add_empty sctx ~loc ~alias =
@@ -269,7 +271,8 @@ let copy_files sctx ~dir ~expander ~src_dir (def : Copy_files.t) =
269271
let+ () =
270272
Memo.Option.iter def.alias ~f:(fun alias ->
271273
let alias = Alias.make alias ~dir in
272-
Rules.Produce.Alias.add_deps alias (Action_builder.path_set targets))
274+
Alias_rules.check_empty ~loc ~dir alias
275+
>>> Rules.Produce.Alias.add_deps alias (Action_builder.path_set targets))
273276
in
274277
targets
275278
;;
@@ -284,7 +287,8 @@ let copy_files sctx ~dir ~expander ~src_dir (def : Copy_files.t) =
284287
let alias sctx ?extra_bindings ~dir ~expander (alias_conf : Alias_conf.t) =
285288
let alias = Alias.make ~dir alias_conf.name in
286289
let loc = alias_conf.loc in
287-
Expander.eval_blang expander alias_conf.enabled_if
290+
Alias_rules.check_empty ~loc ~dir alias
291+
>>> Expander.eval_blang expander alias_conf.enabled_if
288292
>>= function
289293
| false -> Alias_rules.add_empty sctx ~loc ~alias
290294
| true ->

test/blackbox-tests/test-cases/alias-empty.t

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,29 @@ For versions prior to 3.20 this does not fail:
1919
$ dune build @empty
2020
I should not be added!
2121

22-
For versions 3.20 and after this fails:
22+
Also creating an alias called empty is allowed prior to 3.20:
23+
$ cat > dune <<EOF
24+
> (alias
25+
> (name empty)
26+
> (deps foo))
27+
> EOF
28+
$ cat > foo
29+
30+
$ dune build @empty
31+
32+
For versions 3.20 and after these should fail:
33+
2334
$ cat > dune-project <<EOF
2435
> (lang dune 3.20)
2536
> EOF
2637

38+
$ cat > dune <<EOF
39+
> (rule
40+
> (alias empty)
41+
> (action
42+
> (echo "I should not be added!")))
43+
> EOF
44+
2745
$ dune build @empty
2846
File "dune", lines 1-4, characters 0-65:
2947
1 | (rule
@@ -33,3 +51,17 @@ For versions 3.20 and after this fails:
3351
Error: User-defined rules cannot be added to the 'empty' alias
3452
[1]
3553

54+
$ cat > dune <<EOF
55+
> (alias
56+
> (name empty)
57+
> (deps foo))
58+
> EOF
59+
60+
$ dune build @empty
61+
File "dune", lines 1-3, characters 0-33:
62+
1 | (alias
63+
2 | (name empty)
64+
3 | (deps foo))
65+
Error: User-defined rules cannot be added to the 'empty' alias
66+
[1]
67+

0 commit comments

Comments
 (0)