# `Git.Commands.Rerere`
[🔗](https://github.com/joshrotenberg/git_wrapper_ex/blob/main/lib/git/commands/rerere.ex#L1)

Implements the `Git.Command` behaviour for `git rerere`.

Reuse recorded resolution of conflicted merges. Supports the `status`,
`diff`, `clear`, `forget`, `gc`, and `remaining` subcommands.

# `t`

```elixir
@type t() :: %Git.Commands.Rerere{
  clear: boolean(),
  diff: boolean(),
  forget: String.t() | nil,
  gc: boolean(),
  remaining: boolean(),
  status: boolean()
}
```

# `args`

```elixir
@spec args(t()) :: [String.t()]
```

Returns the argument list for `git rerere`.

## Examples

    iex> Git.Commands.Rerere.args(%Git.Commands.Rerere{})
    ["rerere", "status"]

    iex> Git.Commands.Rerere.args(%Git.Commands.Rerere{status: true})
    ["rerere", "status"]

    iex> Git.Commands.Rerere.args(%Git.Commands.Rerere{diff: true})
    ["rerere", "diff"]

    iex> Git.Commands.Rerere.args(%Git.Commands.Rerere{clear: true})
    ["rerere", "clear"]

    iex> Git.Commands.Rerere.args(%Git.Commands.Rerere{forget: "path/to/file"})
    ["rerere", "forget", "path/to/file"]

    iex> Git.Commands.Rerere.args(%Git.Commands.Rerere{gc: true})
    ["rerere", "gc"]

    iex> Git.Commands.Rerere.args(%Git.Commands.Rerere{remaining: true})
    ["rerere", "remaining"]

# `parse_output`

```elixir
@spec parse_output(String.t(), non_neg_integer()) ::
  {:ok, [String.t()]}
  | {:ok, String.t()}
  | {:ok, :done}
  | {:error, {String.t(), non_neg_integer()}}
```

Parses the output of `git rerere`.

- For `status` and `remaining` modes, returns `{:ok, [String.t()]}` with
  a list of file paths.
- For `diff` mode, returns `{:ok, String.t()}` with raw diff output.
- For `clear`, `forget`, and `gc` modes, returns `{:ok, :done}`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
