All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jakub Narębski" <jnareb@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git <git@vger.kernel.org>, Richard Braun <rbraun@sceen.net>
Subject: Re: [PATCH] gitweb: fix link to parent diff with pathinfo
Date: Wed, 25 May 2016 22:33:32 +0200	[thread overview]
Message-ID: <CANQwDwdKaVDGDxZZma25WcV+ea90YtFhDedLwv2KNZt6jhKVAQ@mail.gmail.com> (raw)
In-Reply-To: <xmqq37p75nif.fsf@gitster.mtv.corp.google.com>

On Tue, May 24, 2016 at 8:17 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Richard Braun <rbraun@sceen.net> writes:
>
>> Gitweb, when used with PATH_INFO, shows a link to parent diff
>> like http://somedomain/somerepo.git/commitdiff/somehash?hp=parenthash.
>> That link reports "400 - Invalid hash parameter".

Richard, at which view is this bad link present? Err... never mind, I see that
gitweb uses link to 'commitdiff' view with 'hash_parent' parameter set only
..in two places (well, perhaps there are some which get hash_parent from
-replay, but I doubt it): the "commit" view (link to each parent commit)
and in "commitdiff" view for octopus merges (e.g. "pu" in git.git).

The problem is not with ?hp=parenthash, but with /somehash part, which
somehow got invalid (from the error message). I have checked using
http://repo.or.cz/git.git, and while it has the bug (i.e. uses '?hp=...' instead
of path_info), there is no "400 - Invalid has parameter" error.

>> As I understand it, it should instead directly point to the parent diff,
>> i.e. turn it into http://somedomain/somerepo.git/commitdiff/parenthash,

Actually, the correct path_info based URI would be

  http://somedomain/somerepo.git/commitdiff/parenthash..somehash

Just like href() does with hash_parent_base and hash_base for blobdiff.
Urgh... href() is a bit of mess, now I see it when I am not current.

>> and delete 'hash_parent' element from the %params hash once we used it,
>> otherwise the '?hp=parenthash' string is appended.

That's correct: the unstated rule of href is that if it went into path_info,
it is deleted (not everything can be expressed with path_info), the rest
goes into query parameters. So without deleting the element, it would
be duplicated.

Note that using query parameter when we can use path_info is a minor
error; URL should work anyway (and I don't see why it doesn't - somewhat
the 'hash' parameter got incorrect...).

>>
>> Signed-off-by: Richard Braun <rbraun@sceen.net>
>> ---
>
> Pinging...

I'm sorry, I didn't notice it was meant for me. Simple "Jakub,..."
would be enough.

On Tue, May 24, 2016 at 8:39 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Richard Braun <rbraun@sceen.net> writes:
>
>> On Tue, May 24, 2016 at 11:17:28AM -0700, Junio C Hamano wrote:
>>> Pinging...
>>
>> Hum, see [1].
>>
>> Tell me if I need to resend.
>
> Sorry, check the "To:" field of the message you are responding to.
> The ping was not meant to (and was not addressed to) you.  It asked
> for comments from an area expert.

Only this made me realize that you are expecting *my* response.

>>  gitweb/gitweb.perl | 7 ++++++-
>>  1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
>> index 05d7910..f7f7936 100755
>> --- a/gitweb/gitweb.perl
>> +++ b/gitweb/gitweb.perl
>> @@ -1423,7 +1423,12 @@ sub href {
>>                       delete $params{'hash'};
>>                       delete $params{'hash_base'};
>>               } elsif (defined $params{'hash'}) {
>> -                     $href .= esc_path_info($params{'hash'});
>> +                     if (defined $params{'hash_parent'}) {
>> +                             $href .= esc_path_info($params{'hash_parent'});
>> +                             delete $params{'hash_parent'};
>> +                     } else {
>> +                             $href .= esc_path_info($params{'hash'});
>> +                     }

This should read _something_ like this

+                     if (defined $params{'hash_parent'}) {
+                             $href .=
esc_path_info($params{'hash_parent'}) . '..';
+                             delete $params{'hash_parent'};
+                     }
+                     $href .= esc_path_info($params{'hash'});
+                      delete $params{'hash'};

Otherwise you would get correct link in your situation with
bad 'hash' parameter, but not the view that was requested;
it would not be diff between current and given parent, but
commitdiff for parent (to grandparent(s)).

Richard, thanks for finding a problematic thing, but you
need to search more for a true fix.

Regards
-- 
Jakub Narebski

  parent reply	other threads:[~2016-05-25 20:34 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-06 10:19 [PATCH] gitweb: fix link to parent diff with pathinfo Richard Braun
2016-05-06 22:21 ` Junio C Hamano
2016-05-07  0:11   ` Richard Braun
2016-05-24 18:17     ` Junio C Hamano
2016-05-24 18:26       ` Richard Braun
2016-05-24 18:39         ` Junio C Hamano
2016-05-25 20:33       ` Jakub Narębski [this message]
2016-05-25 22:20         ` Richard Braun

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=CANQwDwdKaVDGDxZZma25WcV+ea90YtFhDedLwv2KNZt6jhKVAQ@mail.gmail.com \
    --to=jnareb@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=rbraun@sceen.net \
    /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.