Skip to content

Commit

Permalink
mailmap: default mailmap.blob in bare repositories
Browse files Browse the repository at this point in the history
The motivation for mailmap.blob is to let users of bare
repositories use the mailmap feature, as they would not have
a checkout containing the .mailmap file. We can make it even
easier for them by just looking in HEAD:.mailmap by default.

We can't know for sure that this is where they would keep a
mailmap, of course, but it is the best guess (and it matches
the non-bare behavior, which reads from HEAD:.mailmap in the
working tree). If it's missing, git will silently ignore the
setting.

We do not do the same magic in the non-bare case, because:

  1. In the common case, HEAD:.mailmap will be the same as
     the .mailmap in the working tree, which is a no-op.

  2. In the uncommon case, the user has modified .mailmap
     but not yet committed it, and would expect the working
     tree version to take precedence.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
peff authored and gitster committed Dec 13, 2012
1 parent d5422b0 commit 8c473ce
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 3 deletions.
8 changes: 5 additions & 3 deletions Documentation/config.txt
Expand Up @@ -1519,9 +1519,11 @@ mailmap.file::


mailmap.blob:: mailmap.blob::
Like `mailmap.file`, but consider the value as a reference to a Like `mailmap.file`, but consider the value as a reference to a
blob in the repository (e.g., `HEAD:.mailmap`). If both blob in the repository. If both `mailmap.file` and
`mailmap.file` and `mailmap.blob` are given, both are parsed, `mailmap.blob` are given, both are parsed, with entries from
with entries from `mailmap.file` taking precedence. `mailmap.file` taking precedence. In a bare repository, this
defaults to `HEAD:.mailmap`. In a non-bare repository, it
defaults to empty.


man.viewer:: man.viewer::
Specify the programs that may be used to display help in the Specify the programs that may be used to display help in the
Expand Down
5 changes: 5 additions & 0 deletions mailmap.c
Expand Up @@ -233,7 +233,12 @@ static int read_mailmap_blob(struct string_list *map,
int read_mailmap(struct string_list *map, char **repo_abbrev) int read_mailmap(struct string_list *map, char **repo_abbrev)
{ {
int err = 0; int err = 0;

map->strdup_strings = 1; map->strdup_strings = 1;

if (!git_mailmap_blob && is_bare_repository())
git_mailmap_blob = "HEAD:.mailmap";

err |= read_mailmap_file(map, ".mailmap", repo_abbrev); err |= read_mailmap_file(map, ".mailmap", repo_abbrev);
err |= read_mailmap_blob(map, git_mailmap_blob, repo_abbrev); err |= read_mailmap_blob(map, git_mailmap_blob, repo_abbrev);
err |= read_mailmap_file(map, git_mailmap_file, repo_abbrev); err |= read_mailmap_file(map, git_mailmap_file, repo_abbrev);
Expand Down
25 changes: 25 additions & 0 deletions t/t4203-mailmap.sh
Expand Up @@ -218,6 +218,31 @@ test_expect_success 'mailmap.blob can be missing' '
test_cmp expect actual test_cmp expect actual
' '


test_expect_success 'mailmap.blob defaults to off in non-bare repo' '
git init non-bare &&
(
cd non-bare &&
test_commit one .mailmap "Fake Name <author@example.com>" &&
echo " 1 Fake Name" >expect &&
git shortlog -ns HEAD >actual &&
test_cmp expect actual &&
rm .mailmap &&
echo " 1 A U Thor" >expect &&
git shortlog -ns HEAD >actual &&
test_cmp expect actual
)
'

test_expect_success 'mailmap.blob defaults to HEAD:.mailmap in bare repo' '
git clone --bare non-bare bare &&
(
cd bare &&
echo " 1 Fake Name" >expect &&
git shortlog -ns HEAD >actual &&
test_cmp expect actual
)
'

test_expect_success 'cleanup after mailmap.blob tests' ' test_expect_success 'cleanup after mailmap.blob tests' '
rm -f .mailmap rm -f .mailmap
' '
Expand Down

0 comments on commit 8c473ce

Please sign in to comment.