Re: [PATCH 0/2] mailmap from blobs
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:55:31
Jeff King [off-list ref] writes:
Subject: [PATCH] mailmap: default mailmap.blob in bare repositories
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 <redacted>
---
I went with defaulting mailmap.blob, because it provides an easy path
for turning off the feature (you just override mailmap.blob).Very sensibly explained. I like it when people clearly explain the thinking behind the change in the log message. Thanks, will queue.
quoted hunk
Documentation/config.txt | 8 +++++--- mailmap.c | 5 +++++ t/t4203-mailmap.sh | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-)diff --git a/Documentation/config.txt b/Documentation/config.txt index 3760077..1a3c554 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt@@ -1519,9 +1519,11 @@ mailmap.blob:: mailmap.blob:: Like `mailmap.file`, but consider the value as a reference to a - blob in the repository (e.g., `HEAD:.mailmap`). If both - `mailmap.file` and `mailmap.blob` are given, both are parsed, - with entries from `mailmap.file` taking precedence. + blob in the repository. If both `mailmap.file` and + `mailmap.blob` are given, both are parsed, with entries from + `mailmap.file` taking precedence. In a bare repository, this + defaults to `HEAD:.mailmap`. In a non-bare repository, it + defaults to empty. man.viewer:: Specify the programs that may be used to display help in thediff --git a/mailmap.c b/mailmap.c index 5ffe48a..b16542f 100644 --- a/mailmap.c +++ b/mailmap.c@@ -233,7 +233,12 @@ int read_mailmap(struct string_list *map, char **repo_abbrev) int read_mailmap(struct string_list *map, char **repo_abbrev) { int err = 0; + 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_blob(map, git_mailmap_blob, repo_abbrev); err |= read_mailmap_file(map, git_mailmap_file, repo_abbrev);diff --git a/t/t4203-mailmap.sh b/t/t4203-mailmap.sh index e7ea40c..aae30d9 100755 --- a/t/t4203-mailmap.sh +++ b/t/t4203-mailmap.sh@@ -218,6 +218,31 @@ test_expect_success 'mailmap.blob can be missing' ' 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' ' rm -f .mailmap '