From: Jakub Narebski <jnareb@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 1/5] gitweb: Option for filling only specified info in fill_project_list_info
Date: Fri, 10 Feb 2012 00:52:26 +0100 [thread overview]
Message-ID: <201202100052.26399.jnareb@gmail.com> (raw)
In-Reply-To: <7v4nuzvbnr.fsf@alter.siamese.dyndns.org>
On Fri, 10 Feb 2012, Junio C Hamano wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
>
>>> The lack of any real use of @fill_only in this patch also makes it hard to
>>> judge if the new API gives a useful semantics. I would, without looking
>>> at the real usage in 2/5 patch, naïvely expect that such a lazy filling
>>> scheme would say "I am going to use A, B and C; I want to know if any of
>>> them is missing, because I need values for all of them and I am going to
>>> call a helper function to fill them if any of them is missing. Having A
>>> and B is not enough for the purpose of this query, because I still need to
>>> know C and I would call the helper function that computes all of them in
>>> such a case. Even though it might be wasteful to recompute A and B,
>>> computing all three at once is the only helper function available to me".
>>>
>>> So for a person who does not have access to the real usage of the new API,
>>> being able to give only a single $key *appears* make no sense at all, and
>>> also the meaning of the @fill_only parameter is unclear, especially the
>>> part that checks if that single $key appears in @fill_only.
>>
>> ...
>> information that is not already present. If @fill_only is nonempty, it
>> fills only selected information, again only if it is not already present.
>> @fill_only empty means no restrictions... which probably is not very obvious,
>> but is documented.
>>
>> project_info_needs_filling() returns true if $key is not filled and is
>> interesting.
>
> 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;
}
which would translate to
if (project_info_needs_filled($pr, 'age') ||
project_info_needs_filled($pr, 'age_string') {
my (@activity) = git_get_last_activity($pr->{'path'});
unless (@activity) {
next PROJECT;
}
($pr->{'age'}, $pr->{'age_string'}) = @activity;
}
and then with @fill_only
if (project_info_needs_filled($pr, 'age', @fill_only) ||
project_info_needs_filled($pr, 'age_string', @fill_only) {
my (@activity) = git_get_last_activity($pr->{'path'});
unless (@activity) {
next PROJECT;
}
($pr->{'age'}, $pr->{'age_string'}) = @activity;
}
The same should be done for 'descr_long' and 'descr' which are also
always filled together.
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2012-02-09 23:52 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 [this message]
2012-02-09 23:56 ` Junio C Hamano
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=201202100052.26399.jnareb@gmail.com \
--to=jnareb@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.