Current section

Files

Jump to
git_hooks lib config.ex
Raw

lib/config.ex

defmodule GitHooks.Config do
@moduledoc false
alias GitHooks.Config.{
BranchConfig,
IOConfig,
TasksConfig,
VerboseConfig
}
@supported_hooks [
:pre_commit,
:prepare_commit_msg,
:commit_msg,
:post_commit,
:pre_rebase,
:pre_receive,
:post_receive,
:post_checkout,
:post_merge,
:pre_push,
:push_to_checkout,
:pre_applypatch,
:applypatch_msg,
:post_applypatch,
:update,
:post_update,
:pre_auto_gc,
:post_rewrite,
:sendemail_validate,
:fsmonitor_watchman
]
@spec supported_hooks() :: list(atom)
def supported_hooks, do: @supported_hooks ++ [:all]
@spec git_hooks() :: list(atom)
def git_hooks do
:git_hooks
|> Application.get_env(:hooks, [])
|> Keyword.take(@supported_hooks)
|> Keyword.keys()
end
@doc """
Returns the configuration for the given git hook type.
"""
@spec get_git_hook_type_config(GitHooks.git_hook_type()) :: list(term)
def get_git_hook_type_config(git_hook_type) do
:git_hooks
|> Application.get_env(:hooks, [])
|> Keyword.get(git_hook_type, [])
end
@doc """
Returns the configured mix path.
The config should be a valid path the `mix` binary. The default behaviour
expects a regular `elixir` install and defaults to `mix`.
"""
@spec mix_path() :: String.t()
def mix_path do
Application.get_env(:git_hooks, :mix_path, "mix")
end
defdelegate tasks(git_hook_type), to: TasksConfig
defdelegate verbose?, to: VerboseConfig
defdelegate verbose?(git_hook_type), to: VerboseConfig
defdelegate current_branch_allowed?(git_hook_type), to: BranchConfig
defdelegate current_branch, to: BranchConfig
defdelegate io_stream(git_hook_type), to: IOConfig
end