Web lists-archives.com

Re: [RFC/PATCH] Use mailmap by default in log, show and whatchanged




Hi CB,

On Thu, 13 Dec 2018, CB Bailey wrote:

> From: CB Bailey <cbailey32@xxxxxxxxxxxxx>
> 
> People who have changed their name or email address will usually know
> that they need to set 'log.mailmap' in order to have their new details
> reflected for old commits with 'git log', but others who interact with
> them may not know or care enough to enable this option.
> 
> Change the default for 'git log' and friends to always use mailmap so
> that everyone gets to see canonical names and email addresses.
> 
> Signed-off-by: CB Bailey <cbailey32@xxxxxxxxxxxxx>
> ---
> 
> Related to my patch to make shortlog pass the mailmap into the revision
> walker which may end up being configuratble behavior, I thought I'd
> propose this for discussion.
> 
> For people who change their names during their involvement in a project,
> it can be important that the people with whom they work only see their
> correct name, even when browsing old history.

This makes a ton of sense to me.

Thank you,
Dscho

> 
> I had a dig around in the mailing list archives and couldn't find any
> specific reason not to use a mailmap in log where one is in use. I did
> find this message which suggests that it makes sense to make it the
> default for human-consumed formats. This patch doesn't affect
> "--pretty=raw" formatting.
> 
>  Documentation/config/log.txt |  4 ++--
>  Documentation/git-log.txt    | 12 +++++++++---
>  builtin/log.c                |  2 +-
>  t/t4203-mailmap.sh           | 18 ++++++++++++++++++
>  4 files changed, 30 insertions(+), 6 deletions(-)
> 
> diff --git a/Documentation/config/log.txt b/Documentation/config/log.txt
> index 78d9e4453a..8a01eed46b 100644
> --- a/Documentation/config/log.txt
> +++ b/Documentation/config/log.txt
> @@ -39,5 +39,5 @@ log.showSignature::
>  	linkgit:git-whatchanged[1] assume `--show-signature`.
>  
>  log.mailmap::
> -	If true, makes linkgit:git-log[1], linkgit:git-show[1], and
> -	linkgit:git-whatchanged[1] assume `--use-mailmap`.
> +	If false, makes linkgit:git-log[1], linkgit:git-show[1], and
> +	linkgit:git-whatchanged[1] assume `--no-use-mailmap`.
> diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
> index 90761f1694..7815c9a6cb 100644
> --- a/Documentation/git-log.txt
> +++ b/Documentation/git-log.txt
> @@ -50,9 +50,11 @@ OPTIONS
>  	commit was reached.
>  
>  --use-mailmap::
> -	Use mailmap file to map author and committer names and email
> -	addresses to canonical real names and email addresses. See
> -	linkgit:git-shortlog[1].
> +--no-use-mailmap::
> +	Use (or don't use) mailmap file to map author and committer names and
> +	email addresses to canonical real names and email addresses. The default
> +	is to use the mailmap file, but this can be overriden with the
> +	`log.mailmap` configuration option. See linkgit:git-shortlog[1].
>  
>  --full-diff::
>  	Without this flag, `git log -p <path>...` shows commits that
> @@ -205,6 +207,10 @@ log.showRoot::
>  	`git log -p` output would be shown without a diff attached.
>  	The default is `true`.
>  
> +log.mailmap::
> +	If `false`, makes `git log` and related commands assume
> +	`--no-use-mailmap`.
> +
>  log.showSignature::
>  	If `true`, `git log` and related commands will act as if the
>  	`--show-signature` option was passed to them.
> diff --git a/builtin/log.c b/builtin/log.c
> index e8e51068bd..41a5eefb20 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -46,7 +46,7 @@ static int default_follow;
>  static int default_show_signature;
>  static int decoration_style;
>  static int decoration_given;
> -static int use_mailmap_config;
> +static int use_mailmap_config = 1;
>  static const char *fmt_patch_subject_prefix = "PATCH";
>  static const char *fmt_pretty;
>  
> diff --git a/t/t4203-mailmap.sh b/t/t4203-mailmap.sh
> index 43b1522ea2..efb145c4cd 100755
> --- a/t/t4203-mailmap.sh
> +++ b/t/t4203-mailmap.sh
> @@ -424,6 +424,24 @@ EOF
>  
>  test_expect_success 'Log output with --use-mailmap' '
>  	git log --use-mailmap | grep Author >actual &&
> +	test_cmp expect actual &&
> +# --use-mailmap is the default
> +	git log | grep Author >actual &&
> +	test_cmp expect actual
> +'
> +
> +cat >expect <<\EOF
> +Author: CTO <cto@xxxxxxxxxxx>
> +Author: claus <me@xxxxxxxxxx>
> +Author: santa <me@xxxxxxxxxx>
> +Author: nick2 <nick2@xxxxxxxxxx>
> +Author: nick2 <bugs@xxxxxxxxxx>
> +Author: nick1 <bugs@xxxxxxxxxx>
> +Author: A U Thor <author@xxxxxxxxxxx>
> +EOF
> +
> +test_expect_success 'Log output with --no-use-mailmap' '
> +	git log --no-use-mailmap | grep Author >actual &&
>  	test_cmp expect actual
>  '
>  
> -- 
> 2.20.0
> 
>