From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: Steffen Prohaska <prohaska@zib.de>,
git@vger.kernel.org, pclouds@gmail.com, john@keeping.me.uk,
schacon@gmail.com
Subject: Re: [PATCH v6 2/6] Add git_env_ulong() to parse environment variable
Date: Tue, 26 Aug 2014 13:20:53 -0700 [thread overview]
Message-ID: <xmqq38cjhuje.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20140826182125.GC17546@peff.net> (Jeff King's message of "Tue, 26 Aug 2014 14:21:26 -0400")
Jeff King <peff@peff.net> writes:
> On Tue, Aug 26, 2014 at 05:23:21PM +0200, Steffen Prohaska wrote:
>
>> +/*
>> + * Use default if environment variable is unset or empty string.
>> + */
>> +unsigned long git_env_ulong(const char *k, unsigned long val)
>> +{
>> + const char *v = getenv(k);
>> + if (v && *v && !git_parse_ulong(v, &val))
>> + die("failed to parse %s", k);
>> + return val;
>> +}
>
> I think the "empty string" behavior here is sensible. I notice that
> git_env_bool is not so careful. I think we should probably do this
> (independent of your series):
>
> -- >8 --
> Subject: git_env_bool: treat empty string as "not set"
>
> If an environment variable we treat as a boolean is not set,
> we use some default value provided by the caller. If it is
> set but is the empty string, however, we treat it as
> "false". This can be rather confusing, as it is easy to set
> the variable to the empty string in the shell (e.g., by
> calling GIT_SMART_HTTP= instead of "unset").
I think different people have different confusion criteria.
To me, these two are very different operations:
$ VAR=
$ unset VAR
I think it boils down to that I see that the distance between "unset
vs set to empty" is far larger than the distance between "empty vs
false". You probably see these two distances the other way,
i.e. "set to empty is almost like unset" and "empty is not a valid
way to say false".
Due to this difference, the new test confused me and had me read it
three times.
> +test_expect_success 'empty GIT_SMART_HTTP leaves smart http enabled' '
> + (GIT_SMART_HTTP= &&
> + export GIT_SMART_HTTP &&
> + cd clone &&
> + git fetch)
> +'
The test before this one explicitly sets GIT_SMART_HTTP to "0" and
expects the fetch to fail. It is sensible to you because "0" is a
lot more explicit "false" than an empty string to you, and you
equate an empty and unset, hence the new one should succeed.
But it looks nonsensical to me that the new one expects to succeed,
because "0" and an empty string are both valid way to say "false"
to me, and it should behave the same way as the "0" one.
I view the *v check before git_parse_ulong() being unnecessarily
defensive to avoid triggering "die()". An empty string is obviously
not a number (somebody could argue that it is the same as zero,
though), but nevertheless the user _is_ telling us to use that value
by setting and exporting the variable. If we cannot parse it,
barfing is what the user would appreciate.
So, I am not sure the patch in the message I am responding to, and I
am not sure about that *v check in Steffen's patch, either.
next prev parent reply other threads:[~2014-08-26 20:21 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-26 15:23 [PATCH v6 0/6] Stream fd to clean filter; GIT_MMAP_LIMIT, GIT_ALLOC_LIMIT with git_env_ulong() Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 1/6] convert: drop arguments other than 'path' from would_convert_to_git() Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 2/6] Add git_env_ulong() to parse environment variable Steffen Prohaska
2014-08-26 18:21 ` Jeff King
2014-08-26 20:20 ` Junio C Hamano [this message]
2014-08-26 20:31 ` Jeff King
2014-08-26 21:54 ` Junio C Hamano
2014-08-27 4:46 ` Jeff King
2014-08-27 14:47 ` Junio C Hamano
2014-08-28 15:21 ` Steffen Prohaska
2014-08-28 17:13 ` Junio C Hamano
2014-08-26 15:23 ` [PATCH v6 3/6] Change GIT_ALLOC_LIMIT check to use git_env_ulong() Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 4/6] Introduce GIT_MMAP_LIMIT to allow testing expected mmap size Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 5/6] Change copy_fd() to not close input fd Steffen Prohaska
2014-08-26 17:10 ` Junio C Hamano
2014-08-26 18:29 ` Jeff King
2014-08-28 15:37 ` Steffen Prohaska
2014-08-28 17:15 ` Junio C Hamano
2014-08-26 15:23 ` [PATCH v6 6/6] convert: stream from fd to required clean filter to reduce used address space Steffen Prohaska
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq38cjhuje.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=john@keeping.me.uk \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
--cc=prohaska@zib.de \
--cc=schacon@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.