Packages
fnord
0.9.40
0.9.40
0.9.39
0.9.38
0.9.37
0.9.36
0.9.35
0.9.34
0.9.33
0.9.32
0.9.31
0.9.30
0.9.29
0.9.28
0.9.27
0.9.26
0.9.25
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.99
0.8.98
0.8.97
0.8.96
0.8.95
0.8.94
0.8.93
0.8.92
0.8.91
0.8.90
0.8.89
0.8.88
0.8.87
0.8.86
0.8.85
0.8.84
0.8.83
0.8.82
0.8.81
0.8.80
0.8.79
0.8.78
0.8.77
0.8.76
0.8.75
0.8.74
0.8.73
0.8.72
0.8.71
0.8.70
0.8.69
0.8.68
0.8.67
0.8.66
0.8.65
0.8.64
0.8.63
0.8.62
0.8.61
0.8.60
0.8.59
0.8.58
0.8.57
0.8.56
0.8.55
0.8.54
0.8.53
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.47
0.8.46
0.8.45
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.1
0.8.0
0.7.24
0.7.23
0.7.22
0.7.21
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.3
0.7.2
0.7.1
0.7.0
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.44
0.4.43
0.4.42
0.4.41
0.4.40
0.4.39
0.4.38
0.4.37
0.4.36
0.4.35
0.4.34
0.4.33
0.4.32
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
AI code archaeology
Current section
Files
Jump to
Current section
Files
lib/git_cli/worktree/review.ex
defmodule GitCli.Worktree.Review do
@moduledoc """
Facade for the shared interactive flow for reviewing, merging, and
cleaning up a fnord-managed worktree. Used by both `Cmd.Ask`
(post-completion) and `Cmd.Worktrees merge`.
Includes pre-merge and post-merge validation gates that run the project's
configured validation rules against the worktree (before merge) and the
main checkout (after merge). Post-merge validation failure triggers an
automatic revert, while merge command failures are returned to the caller.
Public functions dispatch through `impl/0`, resolved via the
`:git_review` Globals key and defaulting to
`GitCli.Worktree.Review.Default`. Tests do NOT point this key at a
mock by default; tests that script the review/merge outcome opt in
per test (see `Fnord.TestCase.mock_git_review/0`).
"""
@type worktree_info :: %{
path: String.t(),
branch: String.t(),
base_branch: String.t()
}
@type merge_range :: {String.t(), String.t()} | nil
@type review_result ::
:ok
| {:cleaned_up, merge_range(), :interactive | :auto}
| {:validation_failed, :pre_merge | :post_merge, String.t()}
| {:merge_failed, String.t()}
@callback interactive_review(String.t(), worktree_info(), keyword()) :: review_result()
@callback auto_merge(String.t(), worktree_info(), keyword()) :: review_result()
@callback colorize_diff(String.t()) :: Owl.Data.t()
@doc """
Walks the user through inspecting the diff, merging, and optionally deleting
the worktree and its local branch. Runs validation before and after merge.
"""
@spec interactive_review(String.t(), worktree_info(), keyword()) :: review_result()
def interactive_review(root, meta, opts \\ []),
do: impl().interactive_review(root, meta, opts)
@doc """
Merges worktree changes and cleans up without prompting. Runs validation
before and after merge. Pre-merge validation failure blocks the merge.
"""
@spec auto_merge(String.t(), worktree_info(), keyword()) :: review_result()
def auto_merge(root, meta, opts \\ []),
do: impl().auto_merge(root, meta, opts)
@doc "Colorizes a unified diff string for terminal display."
@spec colorize_diff(String.t()) :: Owl.Data.t()
def colorize_diff(diff), do: impl().colorize_diff(diff)
@spec impl() :: module
def impl() do
Services.Globals.get_env(:fnord, :git_review) || GitCli.Worktree.Review.Default
end
end