Skip to content

Commit 44d4b5a

Browse files
author
José Valim
committed
Merge pull request #2298 from alco/mix-run-errors
Report errors about missing files in the mix run task
2 parents ed582c3 + 9d4231c commit 44d4b5a

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

lib/mix/lib/mix/tasks/run.ex

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,45 @@ defmodule Mix.Tasks.Run do
5555
Enum.each opts, fn({key, value}) ->
5656
case key do
5757
: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+
5966
: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+
6175
:eval ->
6276
Code.eval_string(value)
6377
_ ->
6478
:ok
6579
end
6680
end
6781

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
6989
if opts[:no_halt], do: :timer.sleep(:infinity)
7090
end
7191

7292
defp filter_patterns(pattern) do
7393
Enum.filter(Enum.uniq(Path.wildcard(pattern)), &File.regular?(&1))
7494
end
95+
96+
defp report_error(msg) do
97+
raise Mix.Error, message: msg
98+
end
7599
end

lib/mix/test/mix/tasks/run_test.exs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,31 @@ defmodule Mix.Tasks.RunTest do
3131
purge [GitRepo]
3232
end
3333

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+
3459
test "run rewrites System.argv" do
3560
in_fixture "no_mixfile", fn ->
3661
file = "argv.exs"

0 commit comments

Comments
 (0)