threads / discuss / 32838

Why is ident_is_sufficient different on Windows?

Subject: Why is ident_is_sufficient different on Windows?

## tl;dr

4 messages between Feb 6, 2013 and Feb 6, 2013.

replies: 3people: 2as markdown or json

Max Horn· Feb 6, 2013, 13:06 UTC · lore
Hi there,
while trying to understand which parts of the author & committer identity are mandatory (name, email, or both), I ended up in ident.c, looking at ident_is_sufficient(), and to my surprise discovered that this seems to differ between Windows (were both are mandatory) and everyone else:
static int ident_is_sufficient(int user_ident_explicitly_given)
{
#ifndef WINDOWS
	return (user_ident_explicitly_given & IDENT_MAIL_GIVEN);
#else
	return (user_ident_explicitly_given == IDENT_ALL_GIVEN);
#endif
}
According to git blame, this was introduced here:
commit 5aeb3a3a838b2cb03d250f3376cf9c41f4d4608e
Author: Junio C Hamano <gitster@pobox.com>
Date:   Sun Jan 17 13:54:28 2010 -0800
    user_ident_sufficiently_given(): refactor the logic to be usable from elsewhere
The commit message sounds as if this was only a refactoring, but the patch to me look as if it changes behaviour, too. Of course this could very well be false, say due to code elsewhere that already caused Windows to behave differently; I wouldn't know.
Still, I wonder: Why does this difference exist?

Cheers, Max

Junio C Hamano· Feb 6, 2013, 20:41 UTC · re: Max Horn · lore

Re: Why is ident_is_sufficient different on Windows?

Max Horn <max@quendi.de> writes:
Show 25 quoted lines
> static int ident_is_sufficient(int user_ident_explicitly_given)
> {
> #ifndef WINDOWS
> 	return (user_ident_explicitly_given & IDENT_MAIL_GIVEN);
> #else
> 	return (user_ident_explicitly_given == IDENT_ALL_GIVEN);
> #endif
> }
>
>
> According to git blame, this was introduced here:
>
> commit 5aeb3a3a838b2cb03d250f3376cf9c41f4d4608e
> Author: Junio C Hamano <gitster@pobox.com>
> Date:   Sun Jan 17 13:54:28 2010 -0800
>
>     user_ident_sufficiently_given(): refactor the logic to be usable from elsewhere
>
>
> The commit message sounds as if this was only a refactoring, but
> the patch to me look as if it changes behaviour, too. Of course
> this could very well be false, say due to code elsewhere that
> already caused Windows to behave differently; I wouldn't know.
>
> Still, I wonder: Why does this difference exist?

Sorry but I do not recall why these ifdefs are there. The commit did this to builtin-commit.c:

-               if (user_ident_explicitly_given != IDENT_ALL_GIVEN)
+               if (!user_ident_sufficiently_given())

I would have written the function to always check with ALL_GIVEN myself, and it is very likely that I was *not* the person who noticed that the function needs to behave differently on Windows, as I do not do Windows.

I suspect somebody from the Windows camp saw a patch I posted without the ifdef, noticed that there is a problem to expect IDENT_NAME_GIVEN to be set on Windows for some reason, and resulted in a reroll of the function in that shape.

I didn't find anything in the list archive, though. So I am stumped.

Junio C Hamano· Feb 6, 2013, 20:47 UTC · re: Junio C Hamano · lore

Re: Why is ident_is_sufficient different on Windows?

Junio C Hamano <gitster@pobox.com> writes:
Show 7 quoted lines
> I suspect somebody from the Windows camp saw a patch I posted
> without the ifdef, noticed that there is a problem to expect
> IDENT_NAME_GIVEN to be set on Windows for some reason, and resulted
> in a reroll of the function in that shape.
>
> I didn't find anything in the list archive, though.  So I am
> stumped.

The only thing I can think of is that on Unix we can guess name from GECOS, which could be considered sufficiently your name, while on Windows we probably do not get anything useful there.

Junio C Hamano· Feb 6, 2013, 20:52 UTC · re: Junio C Hamano · lore

Re: Why is ident_is_sufficient different on Windows?

Junio C Hamano <gitster@pobox.com> writes:
Show 13 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
>> I suspect somebody from the Windows camp saw a patch I posted
>> without the ifdef, noticed that there is a problem to expect
>> IDENT_NAME_GIVEN to be set on Windows for some reason, and resulted
>> in a reroll of the function in that shape.
>>
>> I didn't find anything in the list archive, though.  So I am
>> stumped.
>
> The only thing I can think of is that on Unix we can guess name from
> GECOS, which could be considered sufficiently your name, while on
> Windows we probably do not get anything useful there.
http://thread.gmane.org/gmane.comp.version-control.git/137312/focus=137345

These days, we encourage setting user.name explicitly even on a system on which it is likely that we will see a good GECOS value, so removing the ifdef and always check with ALL may not hurt anybody. I dunno.

← back to recent threads