Junio C Hamano wrote: > Our setenv() may not > be early enough---before the code that decides to call a setenv() > is run, there are many things that are outside your control (like > the tracing subsystem, repository discovery, etc.) will run, and if > any of them does something that triggers tzset() to be called, it > will be done with the value of TZ the process started with, and our > setenv() that happens much later won't have any effect to it. I thought about this before, but in fact it's okay: when calling a function like localtime() (though not localetime_r() --- see my other reply), tzset() is called each time so it is able to reflect any updates to the TZ envvar from the interim. [....] > You can let the existing code produce its natural result and then > when the "force UTC" flag is set, override the offset part to +0000 > if and only if the timezone was obtained from the current > environment (this if-and-only-if is necessary, because you do not > want to rewrite and force UTC when you run "git commit --amend" > without the "--reset-author" option to update a commit that was > created somewhere else to UTC). That way, we do not have to futz > with TZ environment or tzset. Yes, I think this is simpler and nicer than the proposal in my other reply. In addition to not having to futz with TZ, I think I like the semantics better. The motivation that started this thread was not so much "I want to set a custom timezone to blend in" but rather "why are we recording the timezone at all here?" In that context, it makes sense to me to have a setting such as core.recordTimeZone that I can turn *off* to say that I don't think datestamp() callers should consider the timezone to be information worth recording (and instead they should write +0000). To me that seems a little simpler to understand than user.hideTimezone since this focuses on turning some functionality off (recording of the time zone) instead of turning on a new stealth mode. Thanks, Jonathan