All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Narebski <jnareb@gmail.com>
To: Kevin Cernekee <cernekee@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: [PATCH 1/2] gitweb: rename parse_date() to format_date()
Date: Sat, 19 Mar 2011 11:33:57 +0100	[thread overview]
Message-ID: <201103191134.00098.jnareb@gmail.com> (raw)
In-Reply-To: <ab54ba2199cc7487e383a31e3aa65885@localhost>

On Sat, 19 Mar 2011, Kevin Cernekee wrote:

> One might reasonably expect a function named parse_date() to be used
> for something along these lines:
> 
> $unix_time_t = parse_date("2011-03-19");

First, one would expect parse_date() to return either list of year, 
month, etc., e.g. [2011, 3, 19, ...], or a hash with named
date fragments, e.g. {'year' => 2011, 'month' => 3, ...}.

Almost all other parse_* subroutines in gitweb (parse_commit, parse_tag,
parse_difftree_raw_line, parse_ls_tree_line, with the sole exception of
parse_from_to_diffinfo with perhaps a bit misleading name) return hash
of parsed and pre-formatted fragments.

So if parse_date(1300505805) returned

   (
     'hour' => 3,
     'minute' => 36,
     ...
   )

_without_ the 'rfc2822', 'mday-time' (unused), 'iso-8601', 'iso-tz',
it would be not misnamed parse_*.


Second, it is _date_ because it parses / processes dates in git internal
format.  Perhaps it should be called *_raw_date, or *_git_date, or *_epoch,
or *_timestamp and not *_date.
 
> But instead, gitweb's parse_date works more like:
> 
> &parse_date(1300505805) = {

Note: parse_date takes second argument, which is numeric timezone (defaults
to '-0000'), so one usually uses

  parse_date(1300505805, '+0200')

>         'hour' => 3,
>         'minute' => 36,
>         ...
>         'rfc2822' => 'Sat, 19 Mar 2011 03:36:45 +0000',
>         ...
> }

What I would like to see is to split parsing date from generating formatted
dates into e.g. parse_date and formatted_date, and replace calls to parse_date
with calls to formatted_date (which uses parse_date internally).
 
> Rename the function [to format_date] to improve clarity.  
> No change to functionality. 

But name *format_date* is _not_ a good name.  All other format_* 
subroutines in gitweb return _formatted string_, not a hash which contains
many formatted strings.

It is hard to come up with really good name, but perhaps one from the ;ist
below would be good idea:

 - formatted_date
 - process_date, process_raw_date, process_git_date
 - process_epoch, process_timestamp
 - date_formats
 - from_epoch, date_from_epoch

Any other ideas?
 
> Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
> ---
>  gitweb/gitweb.perl |   18 +++++++++---------
>  1 files changed, 9 insertions(+), 9 deletions(-)

> @@ -4906,7 +4906,7 @@ sub git_log_body {
>  		next if !%co;
>  		my $commit = $co{'id'};
>  		my $ref = format_ref_marker($refs, $commit);
> -		my %ad = parse_date($co{'author_epoch'});
> +		my %ad = format_date($co{'author_epoch'});
>  		git_print_header_div('commit',
>  		               "<span class=\"age\">$co{'age_string'}</span>" .
>  		               esc_html($co{'title'}) . $ref,

Hmm, we should probably fix it so it reads

  -		my %ad = parse_date($co{'author_epoch'});
  +		my %ad = formatted_date($co{'author_epoch'}, $co{'author_tz'});

Especially when preparing for 'localtime' feature.

> @@ -7064,7 +7064,7 @@ sub git_feed {
>  	if (defined($commitlist[0])) {
>  		%latest_commit = %{$commitlist[0]};
>  		my $latest_epoch = $latest_commit{'committer_epoch'};
> -		%latest_date   = parse_date($latest_epoch);
> +		%latest_date   = format_date($latest_epoch);
>  		my $if_modified = $cgi->http('IF_MODIFIED_SINCE');
>  		if (defined $if_modified) {
>  			my $since;

Similarly here.

> @@ -7195,7 +7195,7 @@ XML
>  		if (($i >= 20) && ((time - $co{'author_epoch'}) > 48*60*60)) {
>  			last;
>  		}
> -		my %cd = parse_date($co{'author_epoch'});
> +		my %cd = format_date($co{'author_epoch'});
>  
>  		# get list of changed files
>  		open my $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts,

Same here.

-- 
Jakub Narebski
Poland

  parent reply	other threads:[~2011-03-19 10:31 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-19  5:39 [PATCH 1/2] gitweb: rename parse_date() to format_date() Kevin Cernekee
2011-03-19  5:39 ` [PATCH v4 2/2] gitweb: introduce localtime feature Kevin Cernekee
2011-03-19 15:18   ` Jakub Narebski
2011-03-19 17:56   ` Junio C Hamano
2011-03-19 19:49     ` Kevin Cernekee
2011-03-19 21:09       ` Jakub Narebski
2011-03-19 21:22         ` Kevin Cernekee
2011-03-19 21:41           ` Jakub Narebski
2011-03-20 22:38   ` J.H.
2011-03-20 23:44     ` Kevin Cernekee
2011-03-21  0:20     ` Jakub Narebski
2011-03-21  2:35       ` J.H.
2011-03-21 16:01         ` Jakub Narebski
2011-03-21 18:39           ` Piotr Krukowiecki
2011-03-21 18:39           ` J.H.
2011-03-21 22:20             ` Jakub Narebski
2011-03-24  0:08   ` [PATCH 0/1] Gitweb: Change timezone John 'Warthog9' Hawley
2011-03-24  0:08   ` [PATCH 1/1] gitweb: javascript ability to adjust time based on timezone John 'Warthog9' Hawley
2011-03-24  5:23     ` Kevin Cernekee
2011-03-24  7:21       ` J.H.
2011-03-24 21:23         ` Jakub Narebski
2011-03-24 20:19       ` Jakub Narebski
2011-03-24 22:00         ` Kevin Cernekee
2011-03-24 22:29           ` J.H.
2011-03-24 23:04         ` J.H.
2011-03-24 23:36           ` Jakub Narebski
2011-03-24 15:17     ` Jakub Narebski
2011-03-25 15:20       ` [PATCH (BUGFIX)] gitweb: Fix handling of fractional timezones in parse_date Jakub Narebski
2011-03-25 16:26         ` Kevin Cernekee
2011-03-25 16:50           ` [PATCH (BUGFIX) v2] " Jakub Narebski
2011-03-25 17:15           ` [PATCH (BUGFIX)] " Junio C Hamano
2011-03-25 17:47             ` Jakub Narebski
2011-03-25 19:20             ` [PATCH (BUGFIX) v3] " Jakub Narebski
2011-03-19 10:33 ` Jakub Narebski [this message]
2011-03-19 11:50   ` [PATCH 1/2] gitweb: rename parse_date() to format_date() Jon Seymour
2011-03-19 18:00 ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201103191134.00098.jnareb@gmail.com \
    --to=jnareb@gmail.com \
    --cc=cernekee@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.