From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kevin Cernekee Subject: [PATCH v4 2/2] gitweb: introduce localtime feature Date: Fri, 18 Mar 2011 22:39:34 -0700 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: git@vger.kernel.org To: Junio C Hamano , Jakub Narebski X-From: git-owner@vger.kernel.org Sat Mar 19 06:44:24 2011 Return-path: Envelope-to: gcvg-git-2@lo.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Q0oxc-0001em-06 for gcvg-git-2@lo.gmane.org; Sat, 19 Mar 2011 06:44:24 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753891Ab1CSFoP (ORCPT ); Sat, 19 Mar 2011 01:44:15 -0400 Received: from [69.28.251.93] ([69.28.251.93]:46158 "EHLO b32.net" rhost-flags-FAIL-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1753711Ab1CSFoO (ORCPT ); Sat, 19 Mar 2011 01:44:14 -0400 Received: (qmail 1498 invoked from network); 19 Mar 2011 05:44:12 -0000 Received: from localhost (HELO vps-1001064-677.cp.jvds.com) (127.0.0.1) by localhost with (DHE-RSA-AES128-SHA encrypted) SMTP; 19 Mar 2011 05:44:12 -0000 Received: by vps-1001064-677.cp.jvds.com (sSMTP sendmail emulation); Fri, 18 Mar 2011 22:44:12 -0700 In-Reply-To: User-Agent: vim 7.2 Content-Disposition: inline Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: 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. This improves usability if the majority of a project's contributors are based in a single office, all within the same timezone. It also makes the interface more friendly to non-developers who may need to track updates, such as program managers and supervisors. This change does not affect relative timestamps (e.g. "5 hours ago"), nor does it affect 'patch' and 'patches' views which already use localtime because they are generated by "git format-patch". Affected views include: * 'summary' view, "last change" field (commit time from latest change) * 'log' view, author time * 'commit' and 'commitdiff' views, author/committer time * 'tag' view, tagger time 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) Local times between 00:00 and 05:59, inclusive, will still be printed in red ("atnight" style) in these views. Signed-off-by: Kevin Cernekee Signed-off-by: Jakub Narebski --- gitweb/gitweb.perl | 87 ++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 65 insertions(+), 22 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 57ef08c..b3b7f3f 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -504,6 +504,19 @@ our %feature = ( 'sub' => sub { feature_bool('remote_heads', @_) }, 'override' => 0, 'default' => [0]}, + + # Use the author/commit localtime rather than GMT for all timestamps. + # Disabled by default. + + # To enable system wide have in $GITWEB_CONFIG + # $feature{'localtime'}{'default'} = [1]; + # To have project specific config enable override in $GITWEB_CONFIG + # $feature{'localtime'}{'override'} = 1; + # and in project config gitweb.localtime = 0|1; + 'localtime' => { + 'sub' => sub { feature_bool('localtime', @_) }, + 'override' => 0, + 'default' => [0]}, ); sub gitweb_get_feature { @@ -2919,6 +2932,10 @@ sub format_date { $date{'hour_local'} = $hour; $date{'minute_local'} = $min; $date{'tz_local'} = $tz; + $date{'rfc2822_local'} = sprintf "%s, %d %s %4d %02d:%02d:%02d $tz", + $days[$wday], $mday, $months[$mon], + 1900+$year, $hour ,$min, $sec; + $date{'iso-tz'} = sprintf("%04d-%02d-%02d %02d:%02d:%02d %s", 1900+$year, $mon+1, $mday, $hour, $min, $sec, $tz); @@ -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(" (%02d:%02d %s)", - $date{'hour_local'}, $date{'minute_local'}, $date{'tz_local'}); +# Returns an RFC 2822 timestamp string, which may contain HTML. +# 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. 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. +sub timestamp_html { + my %date = %{$_[0]}; + my $use_localtime = $_[1]; + my $timestamp; + my $alt_time; + + if (gitweb_check_feature('localtime')) { + $timestamp = $date{'rfc2822_local'}; + if ($use_localtime && $date{'hour_local'} < 6) { + $timestamp = "" . + $timestamp . + ""; + } + $alt_time = sprintf(" (%02d:%02d %s)", + $date{'hour'}, $date{'minute'}, "+0000"); } else { - $localtime .= sprintf(" (%02d:%02d %s)", - $date{'hour_local'}, $date{'minute_local'}, $date{'tz_local'}); + $timestamp = $date{'rfc2822'}; + $alt_time = sprintf(" (%02d:%02d %s)", + $date{'hour_local'}, + $date{'minute_local'}, + $date{'tz_local'}); + if ($use_localtime && $date{'hour_local'} < 6) { + $alt_time = "" . + $alt_time . + ""; + } } - return $localtime; + if ($use_localtime) { + $timestamp .= $alt_time; + } + + return $timestamp; } # Outputs the author name and date in long form @@ -3956,10 +3999,9 @@ sub git_print_authorship { my %ad = format_date($co->{'author_epoch'}, $co->{'author_tz'}); print "<$tag class=\"author_date\">" . format_search_author($author, "author", esc_html($author)) . - " [$ad{'rfc2822'}"; - print_local_time(%ad) if ($opts{-localtime}); - print "]" . git_get_avatar($co->{'author_email'}, -pad_before => 1) - . "\n"; + " [" . timestamp_html(\%ad, 0) . "] ". + git_get_avatar($co->{'author_email'}, -pad_before => 1) . + "\n"; } # Outputs table rows containing the full author or committer information, @@ -3983,9 +4025,9 @@ sub git_print_authorship_rows { git_get_avatar($co->{"${who}_email"}, -size => 'double') . "\n" . "" . - " $wd{'rfc2822'}"; - print_local_time(%wd); - print "" . + " " . + timestamp_html(\%wd, 1) . + "" . "\n"; } } @@ -5395,8 +5437,9 @@ sub git_summary { print "\n" . "\n" . "\n"; - if (defined $cd{'rfc2822'}) { - print "\n"; + if (keys %cd) { + print "\n"; } # use per project git URL list in $projectroot/$project/cloneurl -- 1.7.4.1
description" . esc_html($descr) . "
owner" . esc_html($owner) . "
last change$cd{'rfc2822'}
last change" . + timestamp_html(\%cd, 0) . "