Skip to content

Commit 58cc1b3

Browse files
committed
improvement: more granular info on the output of installers
closes #319
1 parent f62b51f commit 58cc1b3

3 files changed

Lines changed: 50 additions & 10 deletions

File tree

lib/igniter.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -961,7 +961,10 @@ defmodule Igniter do
961961
end
962962
else
963963
if opts[:error_on_abort?] do
964-
raise "Aborted by the user."
964+
add_issue(
965+
igniter,
966+
"Dependencies fetch was rejected, some installations may not have completed."
967+
)
965968
else
966969
assign_private(igniter, :refused_fetch_dependencies?, true)
967970
end

lib/igniter/util/install.ex

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,21 @@ defmodule Igniter.Util.Install do
120120
Keyword.put(options, :operation, "compiling #{installing_names}")
121121
)
122122

123-
available_tasks =
123+
{available_tasks, unavailable_tasks} =
124124
Enum.zip(installing, Enum.map(installing, &Mix.Task.get("#{&1}.install")))
125-
|> Enum.filter(fn {_desired_task, source_task} -> source_task end)
125+
|> Enum.split_with(fn {_desired_task, source_task} -> source_task end)
126+
127+
if Enum.any?(unavailable_tasks) do
128+
Mix.shell().info("""
129+
130+
#{IO.ANSI.yellow()}The following installers did not exist or could not be found.#{IO.ANSI.reset()}
131+
If you chose not to install dependencies, this will be true for any uninstalled packages.
132+
133+
#{Enum.map_join(unavailable_tasks, "\n", &"* #{IO.ANSI.yellow()}#{elem(&1, 0)}.install#{IO.ANSI.reset()}")}
134+
""")
135+
136+
# `#name}.install` #{IO.ANSI.red()}x#{IO.ANSI.reset()}")
137+
end
126138

127139
case igniter.issues do
128140
[] ->
@@ -149,8 +161,6 @@ defmodule Igniter.Util.Install do
149161
)
150162
end
151163

152-
IO.puts("\nSuccessfully installed:\n\n#{Enum.map_join(installing, "\n", &"* #{&1}")}")
153-
154164
_issues ->
155165
Igniter.display_issues(igniter)
156166
exit({:shutdown, 1})
@@ -159,10 +169,38 @@ defmodule Igniter.Util.Install do
159169

160170
defp run_installers(igniter, igniter_task_sources, title, argv, options) do
161171
igniter_task_sources
162-
|> Enum.reduce(igniter, fn {name, task}, igniter ->
163-
igniter = Igniter.compose_task(igniter, task, argv)
164-
Mix.shell().info("`#{name}.install` #{IO.ANSI.green()}#{IO.ANSI.reset()}")
165-
igniter
172+
|> Enum.reduce(igniter, fn {name, task_name}, igniter ->
173+
task = task_name |> Mix.Task.get()
174+
175+
if !task.supports_umbrella?() && Mix.Project.umbrella?() do
176+
Igniter.add_issue(igniter, "Cannot run #{task_name} in an umbrella project.")
177+
else
178+
igniter
179+
|> Map.put(:task, Mix.Task.task_name(task))
180+
|> Map.put(:parent, igniter.task)
181+
|> Igniter.Mix.Task.configure_and_run(task, argv)
182+
|> Map.put(:parent, igniter.parent)
183+
|> Map.put(:task, igniter.task)
184+
|> Map.replace!(:args, igniter.args)
185+
|> tap(fn new_igniter ->
186+
new_issue_count = Enum.count(new_igniter.issues)
187+
old_issue_count = Enum.count(igniter.issues)
188+
189+
new_warning_count = Enum.count(new_igniter.warnings)
190+
old_warning_count = Enum.count(igniter.warnings)
191+
192+
cond do
193+
new_issue_count > old_issue_count ->
194+
Mix.shell().info("`#{name}.install` #{IO.ANSI.red()}x#{IO.ANSI.reset()}")
195+
196+
new_warning_count > old_warning_count ->
197+
Mix.shell().info("`#{name}.install` #{IO.ANSI.yellow()}!#{IO.ANSI.reset()}")
198+
199+
true ->
200+
Mix.shell().info("`#{name}.install` #{IO.ANSI.green()}#{IO.ANSI.reset()}")
201+
end
202+
end)
203+
end
166204
end)
167205
|> Igniter.do_or_dry_run(Keyword.put(options, :title, title))
168206

test/mix/tasks/igniter.install_test.exs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ defmodule Mix.Tasks.Igniter.InstallTest do
2525
cmd!("mix", ["deps.compile"], cd: "test_project")
2626
output = cmd!("mix", ["igniter.install", "jason", "--yes"], cd: "test_project")
2727
refute String.contains?(output, "jason\nCompiling")
28-
assert String.contains?(output, "Successfully installed:\n\n* jason")
2928
end
3029

3130
test "displays additional information with `--verbose` option" do

0 commit comments

Comments
 (0)