git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4 2/2] gitweb: introduce localtime feature

From
Jakub Narebski <jnareb@gmail.com>
Date
Mar 19, 2011, 15:18 UTC
Message-ID
<201103191618.29826.jnareb@gmail.com>
In-Reply-To
<dab08d0ff27b0f571a17ed4f1ab0f39b@localhost>
On Sat, 19 Mar 2011, Kevin Cernekee wrote:
> With this feature enabled, all timestamps are shown in the local
> timezone instead of GMT.  The timezone is taken from the appropriate
> timezone string stored in the commit object.
[...]
Show 8 quoted lines
> In the case of 'commit', 'commitdiff' and 'tag' views, gitweb used to
> print both GMT time and time in timezone of author/tagger/committer:
> 
>    Fri, 18 Mar 2011 01:28:57 +0000 (18:28 -0700)
> 
> With localtime enabled, the times will be swapped:
> 
>    Thu, 17 Mar 2011 18:28:57 -0700 (01:28 +0000)

First, currently the localtime part is needed only to have "atnight" warning. I wonder if with 'localtime' feature enabled gitweb should show GMT time, or is it not necessary.

With 'localtime' it could simply be
     Thu, 17 Mar 2011 18:28:57 -0700
either marked with "atnight" as whole, or only time (see below).
> Local times between 00:00 and 05:59, inclusive, will still be printed
> in red ("atnight" style) in these views.

Second, from above description it is not clear which part of date is marked with "atnight" style when 'localtime' feature is enabled.

Is the whole localtime part marked, and GMT left not marked:
     Thu, 17 Mar 2011 18:28:57 -0700 (01:28 +0000)
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Or perhaps only the local _time_ is marked with "atnight" style:
     Thu, 17 Mar 2011 18:28:57 -0700 (01:28 +0000)
                      ^^^^^^^^
Or perhaps whole date now uses "atnight" style:
     Thu, 17 Mar 2011 18:28:57 -0700 (01:28 +0000)
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[...]
Show 15 quoted lines
> @@ -3928,22 +3945,48 @@ sub git_print_section {
>  	print $cgi->end_div;
>  }
>  
> -sub print_local_time {
> -	print format_local_time(@_);
> -}
> -
> -sub format_local_time {
> -	my $localtime = '';
> -	my %date = @_;
> -	if ($date{'hour_local'} < 6) {
> -		$localtime .= sprintf(" (<span class=\"atnight\">%02d:%02d</span> %s)",
> -			$date{'hour_local'}, $date{'minute_local'}, $date{'tz_local'});
> +# Returns an RFC 2822 timestamp string, which may contain HTML.

I'm not sure if we need to write about it being RFC2822-like format; it is just implementation detail.

Perhaps
  +# Returns formatted date and time, outputs HTML.

It is important if it is HTML or not, to know if it needs to be esc_html or not.

> +# If $use_localtime is 0, don't do anything special.
> +# If $use_localtime is 1, add an alternate HH:MM timestamp in parentheses at
> +# the end.
See comment below.
Show 6 quoted lines
>             If $feature{'localtime'} is enabled this looks like: 
> +#   Thu, 17 Mar 2011 18:28:57 -0700 (01:28 +0000)
> +# Otherwise, it looks like:
> +#   Fri, 18 Mar 2011 01:28:57 +0000 (18:28 -0700)
> +# If $use_localtime is 1, this will also apply the "atnight" style to
> +# local times between 00:00 and 05:59.

I would really prefer to split this patch in two: first refactor date-printing code, introducing and using timestamp_html subroutine, with no changes in output, and leave introducing 'localtime' feature for a second patch.

> +sub timestamp_html {
> +	my %date = %{$_[0]};
> +	my $use_localtime = $_[1];
Why not use
   	my ($date, $use_localtime) = @_;
and $date->{'rfc2822_local'} instead of $date{'rfc2822_local'}?

Also with current code the calling convention for timestamp_html (or format_timestamp_html, or format_date_html) looks like this:

  print     " [" . timestamp_html(\%ad, 0) . "] "
or
  print     timestamp_html(\%wd, 1)

This would require anyone who stumbles upon on a calling site to have to refer to definition of this function to understand it.

In many other places we use "named parameters" for such boolean flags; then the calling convention could be

  timestamp_html(\%date)
or
  timestamp_html(\%date, -long=>1)
(or -localtime=>1, or -atnight=>1, etc.).  

We can also/instead provide timestamp_short_html and timestamp_long_html so one can write

  timestamp_short_html(%date)
and
  timestamp_long_html(%date)
-- 
Jakub Narebski
Poland
Previous: Kevin CernekeeNext: Junio C Hamano
Message 3 of 36 in “gitweb: rename parse_date() to format_date()”
  1. 1/2 gitweb: rename parse_date() to format_date()Kevin Cernekee, Mar 19, 2011
  2. 2/2 gitweb: introduce localtime featureKevin Cernekee, Mar 19, 2011
  3. Jakub NarebskiMar 19, 2011
  4. Junio C HamanoMar 19, 2011
  5. Kevin CernekeeMar 19, 2011
  6. Jakub NarebskiMar 19, 2011
  7. Kevin CernekeeMar 19, 2011
  8. Jakub NarebskiMar 19, 2011
  9. J.H.Mar 20, 2011
  10. Kevin CernekeeMar 20, 2011
  11. Jakub NarebskiMar 21, 2011
  12. J.H.Mar 21, 2011
  13. Jakub NarebskiMar 21, 2011
  14. Piotr KrukowieckiMar 21, 2011
  15. J.H.Mar 21, 2011
  16. Jakub NarebskiMar 21, 2011
  17. 0/1 Gitweb: Change timezoneJohn 'Warthog9' Hawley, Mar 24, 2011
  18. 1/1 gitweb: javascript ability to adjust time based on timezoneJohn 'Warthog9' Hawley, Mar 24, 2011
  19. Kevin CernekeeMar 24, 2011
  20. J.H.Mar 24, 2011
  21. Jakub NarebskiMar 24, 2011
  22. Jakub NarebskiMar 24, 2011
  23. Kevin CernekeeMar 24, 2011
  24. J.H.Mar 24, 2011
  25. J.H.Mar 24, 2011
  26. Jakub NarebskiMar 24, 2011
  27. Jakub NarebskiMar 24, 2011
  28. gitweb: Fix handling of fractional timezones in parse_dateJakub Narebski, Mar 25, 2011
  29. Kevin CernekeeMar 25, 2011
  30. gitweb: Fix handling of fractional timezones in parse_dateJakub Narebski, Mar 25, 2011
  31. Junio C HamanoMar 25, 2011
  32. Jakub NarebskiMar 25, 2011
  33. gitweb: Fix handling of fractional timezones in parse_dateJakub Narebski, Mar 25, 2011
  34. Jakub NarebskiMar 19, 2011
  35. Jon SeymourMar 19, 2011
  36. Junio C HamanoMar 19, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.