Users requested hiding location in the world from source control trail. This is an implementation to read user.hideTimezone in cmd_commit and set timezone to UTC if it's true. Added a brief explanation of the new field in Documentation and added tests for true/false and reset-author Signed-off-by: Shengfa Lin <shengfa@xxxxxxxxxx> --- Documentation/config/user.txt | 4 ++++ builtin/commit.c | 5 +++++ t/t7527-commit-hide-timezone.sh | 37 +++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100755 t/t7527-commit-hide-timezone.sh diff --git a/Documentation/config/user.txt b/Documentation/config/user.txt index 59aec7c3ae..bd6813f527 100644 --- a/Documentation/config/user.txt +++ b/Documentation/config/user.txt @@ -36,3 +36,7 @@ user.signingKey:: commit, you can override the default selection with this variable. This option is passed unchanged to gpg's --local-user parameter, so you may specify a key using any method that gpg supports. + +user.hideTimezone:: + Override TZ to UTC for Git commits to hide user's timezone in commit + date diff --git a/builtin/commit.c b/builtin/commit.c index 42b964e0ca..fb1cbb8a39 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1569,6 +1569,11 @@ int cmd_commit(int argc, const char **argv, const char *prefix) status_format = STATUS_FORMAT_NONE; /* Ignore status.short */ s.colopts = 0; + git_config(git_default_config, NULL); + int hide_timezone = 0; + if (!git_config_get_bool("user.hideTimezone", &hide_timezone) && hide_timezone) + setenv("TZ", "UTC", 1); + if (get_oid("HEAD", &oid)) current_head = NULL; else { diff --git a/t/t7527-commit-hide-timezone.sh b/t/t7527-commit-hide-timezone.sh new file mode 100755 index 0000000000..41ed9c27da --- /dev/null +++ b/t/t7527-commit-hide-timezone.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +test_description='git-commit can override local timezone setting by reading user.hideTimezone from config' + +. ./test-lib.sh + +test_expect_success 'commit date shows timezone offset +0300 when user.hideTimezone is false' ' + git config user.hideTimezone false && + echo test1 >> file && + git add file && + # unset GIT_AUTHOR_DATE from test_tick + unset GIT_AUTHOR_DATE && + TZ=Europe/Istanbul git commit -m initial && + git log -1 > output && + grep "Date: .* +0300" output +' + +test_expect_success 'commit date shows timezone offset +0000 when user.hideTimezone is true and reset' ' + git config user.hideTimezone true && + git commit --amend --reset-author && + git log -1 > output && + grep "Date: .* +0000" output +' + +test_expect_success 'commit date shows timezone offset +0000 even TZ setting says otherwise' ' + git config user.hideTimezone true && + echo test2 >> file && + git add file && + # TZ setting corresponding to -0600 or -0500 depending on DST + # unset GIT_AUTHOR_DATE from test_tick + unset GIT_AUTHOR_DATE && + TZ=America/Chicago git commit -m test2 && + git log -1 > output && + grep "Date: .* +0000" output +' + +test_done -- 2.28.0.709.gb0816b6eb0-goog