Shengfa Lin <shengfa@xxxxxxxxxx> writes: > Thanks for the comments and sorry for not describing the design. > I will add it here. Thanks. Please do not forget to add it to the updated patch, too. That's where it matters most---you do not necessarily have to explain things to _me_, but you should, to everybody who will read "git log" in the future in order to understand what we did and why. > First, I would like to use a "global" variable to keep track of whether > record-time-zone is set and default to true. Then in various places such > as commit, pull, merge and rebase; we can add command option that can > modify this value. > > Then in datestamp in date.c, we can check this value; offset would be > initialized to 0 and only be set if record_time_zone is true. Additionally, > date_string from the same file would take an extra argument to indicate if > we want to use nagative sign for zero offset. Then the timestamp along with > sign and 4 digits offset would be stored in "git_default_date" as buf > "1603255519 -0000". I think of this as the "encoding" step. Yes, we could check it in datestamp(), but ... > Initially, I thought this would be sufficient to show "-0000" in commit log > message. However, I found that the show_date function is used for "decoding"; > converting timestamp and tz to more readable format. Then I realize the > function won't distinguish between +0 and -0 as it only takes in a tz as > argument. As a result,... ... I would have imagined that you do not have to deal with all those complications if you don't hook this to such a low level of the call graph. That is why I wondered: >> I may be totally off, ... but wouldn't it be just the >> matter of touching the single callsite of datestamp() in ident.c, so >> that after it gets git_default_date string filled, null out the last >> 5 bytes in it with "-0000" if record_tz is off? Without any change to datestamp() you made in the patch, the call to the function from ident.c may give us back a string that ends with the integer that is the number of seconds since epoch, and sign plus 4 digits, e.g. +0900 or -0800, that would reveal the true timezone. I would have thought that these five bytes can be replaced with -0000 under some condition (including "the global is set" which is a sign that the feature is being used, but not limited to that one--- we may need to make sure the call to ident_default_date() to fill git_default_date.buf is done on behalf of the user to get a new timestamp to record the user's activity, not doing something like "git commit -C <existing commit>"). I do not immediately see a reason why such a change near the surface level, which does not disrupt the workings of the code at lower levels, would not work. Thanks.