builtin/reflog: respect user config in "write" subcommand

The reflog write recognizes only GIT_COMMITTER_NAME and
GIT_COMMITTER_EMAIL environment variables, but forgot to honor the
user.name and user.email configuration variables, due to lack of
repo_config() call to grab these values from the configuration files.

The test suite sets these variables, so this behavior was unnoticed.

Ensure that the reflog write also uses the values of user.name and
user.email if set in the Git configuration.

Co-authored-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Michael Lohmann <git@lohmann.sh>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
next
Michael Lohmann 2025-09-30 21:53:20 +02:00 committed by Junio C Hamano
parent 465eff81de
commit 4a72736d19
2 changed files with 38 additions and 0 deletions

View File

@ -415,6 +415,8 @@ static int cmd_reflog_write(int argc, const char **argv, const char *prefix,
const char *ref, *message;
int ret;

repo_config(repo, git_ident_config, NULL);

argc = parse_options(argc, argv, prefix, options, reflog_write_usage, 0);
if (argc != 4)
usage_with_options(reflog_write_usage, options);

View File

@ -108,6 +108,42 @@ test_expect_success 'simple writes' '
)
'

test_expect_success 'uses user.name and user.email config' '
test_when_finished "rm -rf repo" &&
git init repo &&
(
cd repo &&
test_commit initial &&
COMMIT_OID=$(git rev-parse HEAD) &&

sane_unset GIT_COMMITTER_NAME &&
sane_unset GIT_COMMITTER_EMAIL &&
git config --local user.name "Author" &&
git config --local user.email "a@uth.or" &&
git reflog write refs/heads/something $ZERO_OID $COMMIT_OID first &&
test_reflog_matches . refs/heads/something <<-EOF
$ZERO_OID $COMMIT_OID Author <a@uth.or> $GIT_COMMITTER_DATE first
EOF
)
'

test_expect_success 'environment variables take precedence over config' '
test_when_finished "rm -rf repo" &&
git init repo &&
(
cd repo &&
test_commit initial &&
COMMIT_OID=$(git rev-parse HEAD) &&

git config --local user.name "Author" &&
git config --local user.email "a@uth.or" &&
git reflog write refs/heads/something $ZERO_OID $COMMIT_OID first &&
test_reflog_matches . refs/heads/something <<-EOF
$ZERO_OID $COMMIT_OID $SIGNATURE first
EOF
)
'

test_expect_success 'can write to root ref' '
test_when_finished "rm -rf repo" &&
git init repo &&