defmodule Mix.Tasks.GitHoox.Doctor do
@shortdoc "Diagnose a git_hoox installation"
@moduledoc """
Run a set of checks against the current repo's git_hoox setup.
mix git_hoox.doctor
Each check prints `[ok]`, `[warn]`, or `[fail]` followed by a brief
detail. Exits 1 if any check is an error, 0 otherwise (warnings do not
fail the task — they are reminders).
"""
use Mix.Task
alias GitHoox.Doctor
@impl Mix.Task
@spec run([String.t()]) :: :ok | no_return()
def run(_argv) do
checks = Doctor.run()
Enum.each(checks, &print/1)
case Doctor.aggregate(checks) do
:error -> exit({:shutdown, 1})
_ -> :ok
end
end
defp print(%{name: name, status: status, detail: detail}) do
Mix.shell().info("#{label(status)} #{name} — #{detail}")
end
defp label(:ok), do: "[ok] "
defp label(:warn), do: "[warn]"
defp label(:error), do: "[fail]"
end