Hi! I would like to suggest that the mailmap feature accepts (a limited
form of) wildcards for matching email addresses, which helps transgender
users configure the mailmap to map their old name ("deadname") and email
to their new name and email without revealing the old info in the
mailmap config itself.
For example, consider a user who changed their name from Jane Doe to
John Doe, and their email from jane.doe@xxxxxxxxxxx to
john.doe@xxxxxxxxxxx. John wants to prevent others from learning their
old name, but sometimes it's not feasible to rewrite the entire history
of the repository (e.g. because there are thousands of commits, or
because this would mess up references between commits). In this case,
mailmap seems like a good way to prevent people from finding out the old
name by accident: Just add the line `John Doe <john.doe@xxxxxxxxxxx>
<jane.doe@xxxxxxxxxxx>` to the mailmap config. However, this has the
unfortunate effect that readers may now accidentally find John's old
name if they look at the mailmap config.
I suggest that mailmap config files support wildcards in the email
address. This helps people who have changed their name to specify a
mapping without revealing their old name in the definition of this
mapping. Because the * symbol is valid in an email address, I suggest
the sequence \* to be the wildcard symbol, meaning "0 or more symbols".
This cannot be misinterpreted in an RFC5322-valid email address, because
this sequence is not legal in the domain part, is not legal in an
unquoted local part, and is not legal in a quoted local part unless
preceded by an unescaped backslash (that is, "jo\\*hn"@doe.com does not
contain a wildcard). In short, if mailmap encounters the sequence \* in
an email address, it should interpret the sequence as a wildcard if and
only if it is not directly preceded by an odd number of backslashes
regardless of whether the local part is quoted (so \* is a wildcard, \\*
is not, \\\* is, \\\\* is not).
Now, John can now add the following line to their mailmap config: `John
Doe <john.doe@xxxxxxxxxxx> <\*.doe@xxxxxxxxxxx>`, which does not reveal
their old name. Someone could always spend more effort to uncover the
name using more advanced tools, but the point of this feature is to
prevent accidental discovery of the name in cases where completely
hiding the name is not feasible.
If you have feedback or comments on this suggestion, please let me know.
- Florine