ident: don't require calling prepare_fallback_ident first

In fd5a58477c ("ident: add the ability to provide a "fallback
identity"", 2019-02-25) I made it a requirement to call
prepare_fallback_ident as the first function in the ident API.
However in stash we didn't actually end up following that.

This leads to a BUG if user.email and user.name are set.  It was not
caught in the test suite because we only rely on environment variables
for setting the user name and email instead of the config.

Instead of making it a bug to call other functions in the ident API
first, just return silently if the identity of a user was already set
up.

Reported-by: Denton Liu <liu.denton@gmail.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Thomas Gummerer 2019-03-06 22:09:11 +00:00 коммит произвёл Junio C Hamano
Родитель fd5a58477c
Коммит 0640897dc5
3 изменённых файлов: 7 добавлений и 4 удалений

Просмотреть файл

@ -1493,7 +1493,6 @@ extern int is_terminal_dumb(void);
extern int git_ident_config(const char *, const char *, void *);
/*
* Prepare an ident to fall back on if the user didn't configure it.
* Must be called before any other function from the ident API.
*/
void prepare_fallback_ident(const char *name, const char *email);
extern void reset_ident_date(void);

Просмотреть файл

@ -507,9 +507,7 @@ int git_ident_config(const char *var, const char *value, void *data)
static void set_env_if(const char *key, const char *value, int *given, int bit)
{
if (*given & bit)
BUG("%s was checked before prepare_fallback got called", key);
if (getenv(key))
if ((*given & bit) || getenv(key))
return; /* nothing to do */
setenv(key, value, 0);
*given |= bit;

Просмотреть файл

@ -1096,6 +1096,12 @@ test_expect_success 'stash -- <subdir> works with binary files' '
test_path_is_file subdir/untracked
'
test_expect_success 'stash with user.name and user.email set works' '
test_config user.name "A U Thor" &&
test_config user.email "a.u@thor" &&
git stash
'
test_expect_success 'stash works when user.name and user.email are not set' '
git reset &&
>1 &&