GitMailmap (GitMailmap v1.0.0)

Copy Markdown View Source

Parses, resolves, and serializes Git .mailmap entries.

The module operates on strings and does not perform file or Git repository access.

Examples

iex> entries = GitMailmap.parse("Proper Name <proper@example.com> <old@example.com>\n")
iex> GitMailmap.resolve(entries, "Old Name", "old@example.com")
%{name: "Proper Name", email: "proper@example.com"}
iex> GitMailmap.serialize(entries)
"Proper Name <proper@example.com> <old@example.com>\n"

Summary

Types

A parsed .mailmap entry.

A Git author or committer identity.

Functions

Parses .mailmap content into entries in file order.

Resolves an identity through parsed mailmap entries.

Serializes entries to canonical .mailmap lines.

Types

entry()

@type entry() :: %{
  new_name: String.t() | nil,
  new_email: String.t() | nil,
  old_email: String.t(),
  old_name: String.t() | nil
}

A parsed .mailmap entry.

identity()

@type identity() :: %{name: String.t() | nil, email: String.t()}

A Git author or committer identity.

Functions

parse(content)

@spec parse(String.t()) :: [entry()]

Parses .mailmap content into entries in file order.

Invalid lines are silently ignored, matching Git.

resolve(entries, name, email)

@spec resolve([entry()], String.t() | nil, String.t()) :: identity()

Resolves an identity through parsed mailmap entries.

A matching name-specific entry takes priority over a general email entry.

serialize(entries)

@spec serialize([entry()]) :: String.t()

Serializes entries to canonical .mailmap lines.

Raises ArgumentError when an entry cannot be represented by the format.