File tree Expand file tree Collapse file tree 2 files changed +52
-3
lines changed Expand file tree Collapse file tree 2 files changed +52
-3
lines changed Original file line number Diff line number Diff line change @@ -55,21 +55,45 @@ defmodule Mix.Tasks.Run do
55
55
Enum . each opts , fn ( { key , value } ) ->
56
56
case key do
57
57
:parallel_require ->
58
- value |> filter_patterns |> Kernel.ParallelRequire . files
58
+ case filter_patterns ( value ) do
59
+ [ ] ->
60
+ report_error ( "parallel-require: No files matched pattern #{ value } " )
61
+
62
+ filtered ->
63
+ Kernel.ParallelRequire . files ( filtered )
64
+ end
65
+
59
66
:require ->
60
- value |> filter_patterns |> Enum . each & Code . require_file ( & 1 )
67
+ case filter_patterns ( value ) do
68
+ [ ] ->
69
+ report_error ( "require: No files matched pattern #{ value } " )
70
+
71
+ filtered ->
72
+ Enum . each ( filtered , & Code . require_file ( & 1 ) )
73
+ end
74
+
61
75
:eval ->
62
76
Code . eval_string ( value )
63
77
_ ->
64
78
:ok
65
79
end
66
80
end
67
81
68
- if file , do: Code . require_file ( file )
82
+ if file do
83
+ if File . regular? ( file ) do
84
+ Code . require_file ( file )
85
+ else
86
+ report_error ( "No such file: #{ file } " )
87
+ end
88
+ end
69
89
if opts [ :no_halt ] , do: :timer . sleep ( :infinity )
70
90
end
71
91
72
92
defp filter_patterns ( pattern ) do
73
93
Enum . filter ( Enum . uniq ( Path . wildcard ( pattern ) ) , & File . regular? ( & 1 ) )
74
94
end
95
+
96
+ defp report_error ( msg ) do
97
+ raise Mix.Error , message: msg
98
+ end
75
99
end
Original file line number Diff line number Diff line change @@ -31,6 +31,31 @@ defmodule Mix.Tasks.RunTest do
31
31
purge [ GitRepo ]
32
32
end
33
33
34
+ test "run errors on missing files" do
35
+ git_repo = fixture_path ( "git_repo/lib/git_repo.ex" )
36
+
37
+ in_fixture "no_mixfile" , fn ->
38
+ assert_raise Mix.Error , "require: No files matched pattern non-existent" , fn ->
39
+ Mix.Tasks.Run . run [ "-r" , "non-existent" ]
40
+ end
41
+
42
+ assert_raise Mix.Error , "parallel-require: No files matched pattern non-existent" , fn ->
43
+ Mix.Tasks.Run . run [ "-pr" , "non-existent" ]
44
+ end
45
+
46
+ assert_raise Mix.Error , "No such file: non-existent" , fn ->
47
+ Mix.Tasks.Run . run [ "non-existent" ]
48
+ end
49
+
50
+ assert File . dir? ( "lib" )
51
+ assert_raise Mix.Error , "No such file: lib" , fn ->
52
+ Mix.Tasks.Run . run [ "lib" ]
53
+ end
54
+ end
55
+ after
56
+ purge [ GitRepo ]
57
+ end
58
+
34
59
test "run rewrites System.argv" do
35
60
in_fixture "no_mixfile" , fn ->
36
61
file = "argv.exs"
You can’t perform that action at this time.
0 commit comments