From: Junio C Hamano Date: Tue, 12 Feb 2008 21:41:35 GMT Subject: Re: [PATCH 1/2] config api: Add git_config_magic_int() Message-ID: <7vir0t3l9s.fsf@gitster.siamese.dyndns.org> In-Reply-To: <47B15701.8040803@op5.se> Andreas Ericsson writes: > +int git_config_magic_int(const char *name, const char *value, > + const char *magic_value, int magic_setting) > +{ > + if (value && !strcasecmp(value, magic_value)) > + return magic_setting; > + > + return git_config_int(name, value); > +} I do not think this has much to do with any "magic". An instruction "use 0 threads" when taken literally would mean "do not use any CPU" which would not make much sense. In that sense, giving a magic meaning of "guess an appropriate value" to 0 may be a good idea. A valid alternative would be to make 0 mean the same thing as 1, but that is much more boring ;-) But if you did so, that means "var = 0" invokes the same magic as "var = auto". The magic lives in "0", and not in "auto". I think the direction your patch leads us is good, but I think it should allow an array of symbolic ways to spell values to be useful, that is: struct config_symbolic_int { const char *name; int value; }; int git_config_symbolic_int(const char *var, const char *value, struct config_symbolic_int *); That way, you can have { { "high", 9 }, { "default", 0 }, { "low", 1 } }; and say things like "zlevel = high|default|low".