From: "Giuseppe Bilotta" <giuseppe.bilotta@gmail.com>
To: "Jakub Narebski" <jnareb@gmail.com>
Cc: git@vger.kernel.org, "Petr Baudis" <pasky@suse.cz>,
"Junio C Hamano" <gitster@pobox.com>,
"Shawn O. Pearce" <spearce@spearce.org>
Subject: Re: [PATCHv4] gitweb: parse project/action/hash_base:filename PATH_INFO
Date: Thu, 2 Oct 2008 11:43:04 +0200 [thread overview]
Message-ID: <cb7bb73a0810020243v37759f79xfde4c32c49e1a375@mail.gmail.com> (raw)
In-Reply-To: <200810021059.19708.jnareb@gmail.com>
On Thu, Oct 2, 2008 at 10:59 AM, Jakub Narebski <jnareb@gmail.com> wrote:
> Giuseppe Bilotta wrote:
>>
>> +# dispatch
>> +my %actions = (
>> + "blame" => \&git_blame,
> [...]
>> +);
>
> I'm not sure if the '# dispatch' comment is correct here now that
> %actions hash is moved away from actual dispatch (selecting action
> to run)
Bingo.
>> @@ -519,9 +550,19 @@ sub evaluate_path_info {
>> # do not change any parameters if an action is given using the query string
>> return if $action;
>> $path_info =~ s,^\Q$project\E/*,,;
>> +
>> + # next comes the action
>> + $action = $path_info;
>> + $action =~ s,/.*$,,;
>
> I would use here pattern matching, but your code is also good and
> doesn't need changing; just for completeness below there is alternate
> solution:
>
> + $path_info =~ m,^(.*?)/,;
> + $action = $1;
Yeah, I just followed the existing code style.
>> @@ -534,8 +575,9 @@ sub evaluate_path_info {
>> $file_name ||= validate_pathname($pathname);
>> } elsif (defined $refname) {
>> # we got "project.git/branch"
>
> You meant here
>
> # we got "project.git/branch" or "project.git/action/branch"
Yes I do.
>> - $action ||= "shortlog";
>> - $hash ||= validate_refname($refname);
>> + $action ||= "shortlog";
>> + $hash ||= validate_refname($refname);
>> + $hash_base ||= validate_refname($refname);
>> }
>> }
>
> This hunk is IMHO incorrect. First, $refname is _either_ $hash, or
> $hash_base; it cannot be both. Second, in most cases (like the case
> of 'shortlog' action, either explicit or implicit) it is simply $hash;
> I think it can be $hash_base when $file_name is not set only in
> singular exception case of 'tree' view for the top tree (lack of
> filename is not an error, but is equivalent to $file_name='/').
OTOH, while setting both $hash and $hash_base has worked fine for me
so far (because the right one is automatically used and apparently
setting the other doesn't hurt), choosing which one to set is a much
hairier case. Do you have suggestions for a better way to always make
it work?
>> @@ -544,37 +586,6 @@ evaluate_path_info();
>> our $git_dir;
>> $git_dir = "$projectroot/$project" if $project;
>>
>> -# dispatch
>> -my %actions = (
> [...]
>> -);
>> -
>> if (!defined $action) {
>> if (defined $hash) {
>> $action = git_get_type($hash);
>
> I _think_ the '# dispatch' comment should be left here, and not moved
> with the %actions hash.
I agree.
>> @@ -631,8 +642,15 @@ sub href (%) {
>> if ($params{-replay}) {
>> while (my ($name, $symbol) = each %mapping) {
>> if (!exists $params{$name}) {
>> - # to allow for multivalued params we use arrayref form
>> - $params{$name} = [ $cgi->param($symbol) ];
>> + # the parameter we want to recycle may be either part of the
>> + # list of CGI parameter, or recovered from PATH_INFO
>> + if ($cgi->param($symbol)) {
>> + # to allow for multivalued params we use arrayref form
>> + $params{$name} = [ $cgi->param($symbol) ];
>> + } else {
>> + no strict 'refs';
>> + $params{$name} = $$name if $$name;
>
> I would _perhaps_ add here comment that multivalued parameters can come
> only from CGI query string, so there is no need for something like:
>
> + $params{$name} = (ref($$name) ? @$name : $$name) if $$name;
>
>> + }
>> }
>> }
>> }
>
> This fragment is a bit of ugly code, hopefully corrected in later patch.
> I think it would be better to have 'refactor parsing/validation of input
> parameters' to be very fist patch in series; I am not sure but I suspect
> that is a kind of bugfix for current "$project/$hash" ('shortlog' view)
> and "$project/$hash_base:$file_name" ('blob_plain' and 'tree' view)
> path_info.
But implementing the path_info parsing first makes the input param
refactoring SO much nicer that I would rather put a comment here
saying "this code sucks: we should rather collect all input
parameters" and then clean it up on the subsequent patch.
--
Giuseppe "Oblomov" Bilotta
next prev parent reply other threads:[~2008-10-02 9:44 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-02 0:10 [PATCHv4] gitweb: PATH_INFO support improvements Giuseppe Bilotta
2008-10-02 0:10 ` [PATCHv4] gitweb: parse project/action/hash_base:filename PATH_INFO Giuseppe Bilotta
2008-10-02 0:10 ` [PATCHv4] gitweb: refactor input parameters parse/validation Giuseppe Bilotta
2008-10-02 0:10 ` [PATCHv4] gitweb: generate project/action/hash URLs Giuseppe Bilotta
2008-10-02 0:10 ` [PATCHv4] gitweb: use_pathinfo filenames start with / Giuseppe Bilotta
2008-10-02 0:10 ` [PATCHv4] gitweb: parse parent..current syntax from pathinfo Giuseppe Bilotta
2008-10-02 0:10 ` [PATCHv4] gitweb: generate parent..current URLs Giuseppe Bilotta
2008-10-06 0:17 ` Jakub Narebski
2008-10-04 1:31 ` [PATCHv4] gitweb: parse parent..current syntax from pathinfo Jakub Narebski
2008-10-04 7:24 ` Giuseppe Bilotta
2008-10-04 7:48 ` Jakub Narebski
2008-10-05 8:19 ` Jakub Narebski
2008-10-03 11:28 ` [PATCHv4] gitweb: use_pathinfo filenames start with / Jakub Narebski
2008-10-03 1:48 ` [PATCHv4] gitweb: generate project/action/hash URLs Jakub Narebski
[not found] ` <cb7bb73a0810022330l498bdb20h703dec7833a443e@mail.gmail.com>
2008-10-03 11:24 ` Jakub Narebski
2008-10-04 1:15 ` Jakub Narebski
2008-10-03 1:36 ` [PATCHv4] gitweb: refactor input parameters parse/validation Jakub Narebski
2008-10-03 7:24 ` Giuseppe Bilotta
2008-10-03 11:20 ` Jakub Narebski
2008-10-02 8:59 ` [PATCHv4] gitweb: parse project/action/hash_base:filename PATH_INFO Jakub Narebski
2008-10-02 9:43 ` Giuseppe Bilotta [this message]
2008-10-03 0:48 ` Jakub Narebski
2008-10-03 6:04 ` Giuseppe Bilotta
2008-10-03 10:31 ` Jakub Narebski
2008-10-02 15:34 ` Petr Baudis
2008-10-02 19:30 ` Giuseppe Bilotta
2008-10-02 20:56 ` Petr Baudis
2008-10-02 21:05 ` Giuseppe Bilotta
2008-10-02 22:04 ` Petr Baudis
2008-10-02 22:41 ` Jakub Narebski
2008-10-03 5:54 ` Giuseppe Bilotta
2008-10-02 8:19 ` [PATCHv4] gitweb: PATH_INFO support improvements Jakub Narebski
2008-10-02 8:49 ` Giuseppe Bilotta
2008-10-02 10:16 ` 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=cb7bb73a0810020243v37759f79xfde4c32c49e1a375@mail.gmail.com \
--to=giuseppe.bilotta@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jnareb@gmail.com \
--cc=pasky@suse.cz \
--cc=spearce@spearce.org \
/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).