# `Git.SubmoduleEntry`
[🔗](https://github.com/joshrotenberg/git_wrapper_ex/blob/main/lib/git/submodule_entry.ex#L1)

Parsed representation of a git submodule status entry.

Each entry contains the SHA, path, an optional describe string
(tag describe for the SHA), and a status indicating the submodule state.

## Status values

  * `:current` - submodule is checked out at the recorded commit
  * `:modified` - submodule has a different commit checked out
  * `:uninitialized` - submodule is not initialized
  * `:conflict` - submodule has merge conflicts

# `status`

```elixir
@type status() :: :current | :modified | :uninitialized | :conflict
```

# `t`

```elixir
@type t() :: %Git.SubmoduleEntry{
  describe: String.t() | nil,
  path: String.t(),
  sha: String.t(),
  status: status()
}
```

# `parse`

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

Parses the output of `git submodule status` into a list of
`Git.SubmoduleEntry` structs.

Each line has the format:

    <status_char><sha> <path> (<describe>)

where `<status_char>` is a space (current), `+` (modified),
`-` (uninitialized), or `U` (conflict), and the describe portion
is optional.

## Examples

    iex> Git.SubmoduleEntry.parse(" abc1234 lib/sub (v1.0.0)\n")
    [%Git.SubmoduleEntry{sha: "abc1234", path: "lib/sub", describe: "v1.0.0", status: :current}]

    iex> Git.SubmoduleEntry.parse("+def5678 vendor/dep\n")
    [%Git.SubmoduleEntry{sha: "def5678", path: "vendor/dep", describe: nil, status: :modified}]

    iex> Git.SubmoduleEntry.parse("")
    []

---

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