From: Stefan Hajnoczi Date: Mon, 12 Apr 2010 16:07:25 GMT Subject: Re: Local unset override global options Message-ID: In-Reply-To: <7vtyrgllje.fsf@alter.siamese.dyndns.org> On Mon, Apr 12, 2010 at 4:48 PM, Junio C Hamano wrote: > Stefan Hajnoczi writes: > >> That would work but introduces a special case for smtpuser.  Do you >> think users may wish to unset override other options too? > > I would indeed agree "users may _wish_ to", but that does not matter as > much as "users _need_ to, otherwise they cannot do X and Y and Z". > > You seem to think from the beginning of this thread that "empty means I > don't want it" is a hacky special case that is limited to this smtpuser > variable, but I do not share that view.  Not at all. > There are two rather big reasons we would want to stick to the current > format without introducing "unset".  At least we would want to try to > until we find real need that justifies such a change. > >  - We could introduce a backward incompatible change to the configuration >   file format to say "This variable is not set at all", but once somebody >   starts using the syntax in his .git/config (or worse $HOME/.gitconfig), >   that repository cannot be used by older version of git anymore. > >  - Also internally our variables are never "unset".  Behaviour of a >   plumbing or Porcelain command implemented in C is controlled by >   variables in C, and the contents of the configuration files overwrite >   these variables as they are parsed from the least specific (system) to >   the most specific.  The best you can do is "reset to default" (not >   "unset"), and even that involves fair amount of change. Knowing that variables are never unset internally gives me a different perspective. Thanks for the explanation. Stefan