# `GitModule.Behaviour`
[🔗](https://github.com/gtri/lowendinsight/blob/main/lib/git_module/behaviour.ex#L5)

Behaviour definition for GitModule operations.

This allows for mocking git operations in tests using Mox.

# `repo`

```elixir
@type repo() :: Git.Repository.t()
```

# `clone_repo`

```elixir
@callback clone_repo(String.t(), String.t()) :: {:ok, repo()} | {:error, String.t()}
```

# `delete_repo`

```elixir
@callback delete_repo(repo()) :: [binary()]
```

# `get_clean_contributions_map`

```elixir
@callback get_clean_contributions_map(repo()) :: {:ok, list()}
```

# `get_commit_dates`

```elixir
@callback get_commit_dates(repo()) :: {:ok, [non_neg_integer()]}
```

# `get_contributions_map`

```elixir
@callback get_contributions_map(repo()) ::
  {:ok, [%{contributions: non_neg_integer(), name: String.t()}]}
```

# `get_contributor_count`

```elixir
@callback get_contributor_count(repo()) :: {:ok, non_neg_integer()}
```

# `get_contributor_distribution`

```elixir
@callback get_contributor_distribution(repo()) :: {:ok, map(), non_neg_integer()}
```

# `get_contributors`

```elixir
@callback get_contributors(repo()) :: {:ok, [Contributor.t()]}
```

# `get_default_branch`

```elixir
@callback get_default_branch(repo()) :: {:ok, String.t()}
```

# `get_diff_2_commits`

```elixir
@callback get_diff_2_commits(repo(), [any()]) :: {:ok, [String.t()]} | []
```

# `get_functional_contributors`

```elixir
@callback get_functional_contributors(repo()) :: {:ok, non_neg_integer(), [any()]}
```

# `get_hash`

```elixir
@callback get_hash(repo()) :: {:ok, String.t()}
```

# `get_last_2_delta`

```elixir
@callback get_last_2_delta(repo()) ::
  {:ok, non_neg_integer(), non_neg_integer(), non_neg_integer()}
```

# `get_last_commit_date`

```elixir
@callback get_last_commit_date(repo()) :: {:ok, String.t()}
```

# `get_last_contribution_date_by_contributor`

```elixir
@callback get_last_contribution_date_by_contributor(repo(), String.t()) ::
  String.t() | nil
```

# `get_last_n_commits`

```elixir
@callback get_last_n_commits(repo(), non_neg_integer()) :: {:ok, [any()]}
```

# `get_recent_changes`

```elixir
@callback get_recent_changes(repo()) :: {:ok, number(), number()}
```

# `get_repo`

```elixir
@callback get_repo(String.t()) :: {:ok, repo()} | {:error, String.t()}
```

# `get_repo_size`

```elixir
@callback get_repo_size(repo()) :: {:ok, String.t()}
```

# `get_tag_and_commit_dates`

```elixir
@callback get_tag_and_commit_dates(repo()) :: {:ok, [list()]}
```

# `get_top10_contributors_map`

```elixir
@callback get_top10_contributors_map(repo()) :: {:ok, [any()]}
```

# `get_total_commit_count`

```elixir
@callback get_total_commit_count(repo()) :: {:ok, non_neg_integer() | String.t()}
```

# `get_total_lines`

```elixir
@callback get_total_lines(repo()) :: {:ok, non_neg_integer(), non_neg_integer()}
```

---

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