git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Jakub Narebski <jnareb@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 1/5] gitweb: Option for filling only specified info in fill_project_list_info
Date: Thu, 09 Feb 2012 15:56:46 -0800	[thread overview]
Message-ID: <7vvcnftvb5.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <201202100052.26399.jnareb@gmail.com> (Jakub Narebski's message of "Fri, 10 Feb 2012 00:52:26 +0100")

Jakub Narebski <jnareb@gmail.com> writes:

> On Fri, 10 Feb 2012, Junio C Hamano wrote:
> ...
>> That still does not answer the fundamental issues I had with the presented
>> API: why does it take only a single $key (please re-read my "A, B and C"
>> example), and what does that single $key intersecting with @fill_only have
>> anything to do with "needs-filling"?
>
> project_info_needs_filling() in absence of @fill_only is just a thin
> wrapper around "!defined $pr->{$key}", it checks for each key if it needs
> to be filled.
>
> It is used like this
>
>   if (project_info_needs_filled("A", "A, B, C")) {
>      fill A
>   }
>   if (project_info_needs_filled("B", "A, B, C")) {
>      fill B
>   }
>   ...
>  
>> After all, that 'age' check actually wants to fill 'age' and 'age_string'
>> in the project. Even if some other codepath starts filling 'age' in the
>> project with a later change, the current callers of fill_project_list_info
>> expects _both_ to be filled. So "I know the current implementation fills
>> both at the same time, so checking 'age' alone is sufficient" is not an
>> answer that shows good taste in the API design.
>
> It is not as much matter of API, as the use of checks in loop in 
> fill_project_list_info().
>
> What is now
>
>   my (@activity) = git_get_last_activity($pr->{'path'});
>   unless (@activity) {
>   	next PROJECT;
>   }
>   ($pr->{'age'}, $pr->{'age_string'}) = @activity;
>
> should be
>
>   if (!defined $pr->{'age'} ||
>       !defined $pr->{'age_string'}) {
>   	my (@activity) = git_get_last_activity($pr->{'path'});
>   	unless (@activity) {
>   		next PROJECT;
>   	}
>   	($pr->{'age'}, $pr->{'age_string'}) = @activity;
>   }

Huh?  Compare that with what you wrote above "It is used like this".  This
is *NOT* using the API like that.  The caller knows it wants both age and
age-string, and if even one of them is missing, do the work to fill both.

So why isn't the info-needs-filled API not checking _both_ with a single
call?  It is only because you designed the API to accept only a single $key
instead of list of "here are what I care about".

  reply	other threads:[~2012-02-09 23:56 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-04 12:47 [PATCH 0/5] gitweb: Faster and imrpoved project search Jakub Narebski
2012-02-04 12:47 ` [PATCH 1/5] gitweb: Option for filling only specified info in fill_project_list_info Jakub Narebski
2012-02-09 22:04   ` Junio C Hamano
2012-02-09 22:36     ` Jakub Narebski
2012-02-09 23:18       ` Junio C Hamano
2012-02-09 23:52         ` Jakub Narebski
2012-02-09 23:56           ` Junio C Hamano [this message]
2012-02-10 13:56             ` Jakub Narebski
2012-02-10 17:43               ` Junio C Hamano
2012-02-10 18:17                 ` Jakub Narebski
2012-02-10 19:49                   ` Junio C Hamano
2012-02-10 21:30                     ` Jakub Narebski
2012-02-10 21:44                       ` Junio C Hamano
2012-02-10 22:07                         ` Jakub Narebski
2012-02-04 12:47 ` [PATCH 2/5] gitweb: Faster project search Jakub Narebski
2012-02-04 12:47 ` [PATCH 3/5] gitweb: Highlight matched part of project name when searching projects Jakub Narebski
2012-02-04 12:47 ` [PATCH 4/5] gitweb: Highlight matched part of project description " Jakub Narebski
2012-02-04 12:47 ` [PATCH/RFC 5/5] gitweb: Highlight matched part of shortened project description Jakub Narebski
2012-02-04 18:56   ` [PATCH/RFCv2 " Jakub Narebski
2012-02-04 20:07 ` [PATCH 0/5] gitweb: Faster and imrpoved project search Felipe Contreras
2012-02-04 20:59   ` Jakub Narebski

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=7vvcnftvb5.fsf@alter.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=jnareb@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).