Skip to content

Commit 84f3e02

Browse files
committed
Add extra_success_returns config
Fixes #118
1 parent 0cc589b commit 84f3e02

File tree

4 files changed

+49
-14
lines changed

4 files changed

+49
-14
lines changed

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,25 @@ config :git_hooks,
197197
]
198198
```
199199

200+
By default this library expects by default the following return values from mix tasks:
201+
202+
```elixir
203+
0
204+
:ok
205+
nil
206+
```
207+
208+
If you want to support additional success return values from your mix tasks, you
209+
can add them by adding the following configuration:
210+
211+
```elixir
212+
config :git_hooks,
213+
extra_sucess_returns: [
214+
{:noop, []},
215+
{:ok, []}
216+
]
217+
```
218+
200219
#### Command
201220

202221
To run a simple command you can either declare a string or a tuple with the

lib/config.ex

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,17 @@ defmodule GitHooks.Config do
6363
Application.get_env(:git_hooks, :mix_path, "mix")
6464
end
6565

66+
@doc """
67+
Returns the configuration for additional success returns from mix
68+
tasks.
69+
70+
See `GitHooks.Task` for default supported returns from Mix task.
71+
"""
72+
@spec extra_sucess_returns() :: list(term)
73+
def extra_sucess_returns do
74+
Application.get_env(:git_hooks, :extra_sucess_returns, [])
75+
end
76+
6677
defdelegate tasks(git_hook_type), to: TasksConfig
6778

6879
defdelegate verbose?, to: VerboseConfig

lib/git_hooks.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ defmodule GitHooks do
77
Install.run(["--quiet"])
88
end
99

10+
@typedoc """
11+
A Git hook
12+
"""
1013
@type git_hook_type :: atom
1114
@type git_hook_args :: list(String.t())
1215

lib/tasks/mix.ex

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ defimpl GitHooks.Task, for: GitHooks.Tasks.Mix do
5656
alias GitHooks.Tasks.Mix, as: MixTask
5757
alias GitHooks.Printer
5858

59+
# Mix tasks raise an error if they are valid, but determining if they are
60+
# success or not depends on the return of the task.
61+
# @default_success_results [0, :ok, nil, {:ok, []}, {:noop, []}]
62+
@default_success_results [0, :ok, nil]
63+
64+
@sucess_results GitHooks.Config.extra_sucess_returns() ++ @default_success_results
65+
5966
def run(%MixTask{task: :test, args: args} = mix_task, _opts) do
6067
args = ["test" | args] ++ ["--color"]
6168

@@ -75,22 +82,17 @@ defimpl GitHooks.Task, for: GitHooks.Tasks.Mix do
7582
Map.put(mix_task, :result, result)
7683
end
7784

78-
# Mix tasks raise an error if they are valid, but determining if they are
79-
# success or not depends on the return of the task.
80-
@success_results [0, :ok, nil]
81-
82-
def success?(%MixTask{result: result}) when result in @success_results, do: true
83-
def success?(%MixTask{result: _}), do: false
84-
85-
def print_result(%MixTask{task: task, result: result} = mix_task)
86-
when result in @success_results do
87-
Printer.success("`#{task}` was successful")
88-
89-
mix_task
90-
end
85+
def success?(%MixTask{result: result}) when result in @sucess_results, do: true
86+
def success?(%MixTask{result: _result}), do: false
9187

9288
def print_result(%MixTask{task: task, result: result} = mix_task) do
93-
Printer.error("mix task `#{task}` failed, return result: #{inspect(result)}")
89+
case result do
90+
result when result in @sucess_results ->
91+
Printer.success("`#{task}` was successful")
92+
93+
_ ->
94+
Printer.error("mix task `#{task}` failed, return result: #{inspect(result)}")
95+
end
9496

9597
mix_task
9698
end

0 commit comments

Comments
 (0)