Skip to content

Commit e3d96c3

Browse files
author
José Valim
committed
Remove tty error handler and simply point to print report on bad return
1 parent f0e42f0 commit e3d96c3

File tree

2 files changed

+54
-38
lines changed

2 files changed

+54
-38
lines changed

lib/mix/lib/mix/tasks/app.start.ex

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,22 @@ defmodule Mix.Tasks.App.Start do
2727
end
2828

2929
unless opts[:no_start] do
30-
start(project)
30+
start(project[:app])
3131
end
3232
end
3333

34-
def start(project) do
35-
if app = project[:app] do
34+
@doc false
35+
def start(app) do
36+
if app do
3637
case Application.Behaviour.start(app) do
3738
:ok -> :ok
38-
{ :error, {:bad_return, err}} ->
39-
raise Exception.normalize(err)
39+
{ :error, { :bad_return, _ } } ->
40+
raise Mix.Error, message: "Could not start application #{app}, please see report above"
4041
{ :error, reason } ->
4142
raise Mix.Error, message: "Could not start application #{app}: #{inspect reason}"
4243
end
44+
else
45+
:error
4346
end
4447
end
4548
end

lib/mix/test/mix/tasks/app.start_test.exs

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,30 @@ defmodule Mix.Tasks.App.StartTest do
99
end
1010
end
1111

12-
defmodule BadReturnSample do
12+
defmodule WrongElixirProject do
1313
def project do
14-
[app: :bad_return_app, version: "0.1.0"]
15-
end
16-
# Configuration for the OTP application
17-
def application do
18-
[mod: { Mix.Tasks.App.StartTest.BadReturnApp, [] }]
14+
[app: :error, version: "0.1.0", elixir: "~> 0.8.1"]
1915
end
2016
end
2117

22-
defmodule BadReturnApp do
23-
use Application.Behaviour
24-
25-
def start(_type, _args) do
26-
:bar # Bad return
18+
setup config do
19+
if config[:app] do
20+
:error_logger.tty(false)
2721
end
22+
:ok
2823
end
2924

30-
defmodule WrongElixirProject do
31-
def project do
32-
[app: :error, version: "0.1.0", elixir: "~> 0.8.1"]
25+
teardown config do
26+
if app = config[:app] do
27+
:application.stop(app)
28+
:application.unload(app)
3329
end
30+
:ok
31+
end
32+
33+
teardown do
34+
:error_logger.tty(true)
35+
:ok
3436
end
3537

3638
test "recompiles project if elixir version changed" do
@@ -89,39 +91,50 @@ defmodule Mix.Tasks.App.StartTest do
8991
end
9092
end
9193

92-
test "start does nothing if project[:app] is nil" do
93-
project = Mix.project
94-
assert Mix.Tasks.App.Start.start(project) == nil
94+
defmodule BadReturnSample do
95+
def project do
96+
[app: :bad_return_sample, version: "0.1.0"]
97+
end
98+
99+
def application do
100+
Process.get(:application_definition)
101+
end
95102
end
96103

97-
test "start runs successfully in okay case" do
98-
Mix.Project.push MixTest.Case.Sample
99-
in_fixture "no_mixfile", fn ->
100-
Mix.Tasks.Compile.run []
101-
project = Mix.project
102-
assert Mix.Tasks.App.Start.start(project) == :ok
104+
defmodule BadReturnApp do
105+
use Application.Behaviour
106+
107+
def start(_type, _args) do
108+
:bad # Bad return
103109
end
104110
end
105111

106-
test "start raises an exception on :error" do
107-
Mix.Project.push AppStartSample
112+
test "start does nothing if app is nil" do
113+
assert Mix.Tasks.App.Start.start(nil) == :error
114+
end
108115

116+
@tag app: :bad_return_sample
117+
test "start raises on :error" do
118+
Mix.Project.push BadReturnSample
109119
in_fixture "no_mixfile", fn ->
110-
project = Mix.project
111-
assert_raise Mix.Error, fn ->
112-
Mix.Tasks.App.Start.start(project)
120+
Process.put(:application_definition, applications: [:unknown])
121+
Mix.Tasks.Compile.run []
122+
123+
assert_raise Mix.Error, %r"Could not start application bad_return_sample: ", fn ->
124+
Mix.Tasks.App.Start.start(:bad_return_sample)
113125
end
114126
end
115127
end
116128

117-
test "start raises a stacktrace on bad_return" do
129+
@tag app: :bad_return_sample
130+
test "start points to report on bad return" do
118131
Mix.Project.push BadReturnSample
119-
120132
in_fixture "no_mixfile", fn ->
133+
Process.put(:application_definition, mod: { BadReturnApp, [] })
121134
Mix.Tasks.Compile.run []
122-
project = Mix.project
123-
assert_raise ErlangError, fn ->
124-
Mix.Tasks.App.Start.start(project)
135+
136+
assert_raise Mix.Error, %r"Could not start application bad_return_sample, please see report above", fn ->
137+
Mix.Tasks.App.Start.start(:bad_return_sample)
125138
end
126139
end
127140
end

0 commit comments

Comments
 (0)