All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Narebski <jnareb@gmail.com>
To: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCHv3] gitweb: make static files accessible with PATH_INFO
Date: Wed, 28 Jan 2009 01:14:58 +0100	[thread overview]
Message-ID: <200901280114.59388.jnareb@gmail.com> (raw)
In-Reply-To: <1233062946-22395-1-git-send-email-giuseppe.bilotta@gmail.com>

On Tue, 27 Jan 2009, Giuseppe Bilotta wrote:

> When PATH_INFO is defined, static files such as the defalt CSS or the
                                                      default

> shortcut icon are not accessible beyond the summary page (e.g. in
> shortlog or commit view).
> 
> Fix this by adding a <base> tag pointing to the script base URL.

By the way, I have thought that it would conflict with use path_info
for 'blob_plain' action to have links work in document... but I forgot
that then we do not use gitweb HTML header...

> 
> Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
> ---
> Of course, last time I forgot that the BASE href is supposed to be
> absolute. While Opera apparently has no problem with it being relative,
> other browsers such as Firefox are stricter about it.

Errrr... I think you are talking about _full_ vs. _absolute_, not
_absolute_ vs. _relative_, see below.

> 
>  gitweb/gitweb.perl |    8 ++++++++
>  1 files changed, 8 insertions(+), 0 deletions(-)
> 
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 931db4f..411b1f6 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -2901,6 +2901,14 @@ sub git_header_html {
>  <meta name="robots" content="index, nofollow"/>
>  <title>$title</title>
>  EOF
> +# the stylesheet, favicon etc urls won't work correctly with path_info unless we set the appropriate base URL

Errr... could you please break this line to not have it overly long?

> +	if ($ENV{'PATH_INFO'}) {
> +		my $base = $my_url;

Hmmm...

  our $my_url = $cgi->url(); # = $cgi->url(-full);
  our $my_uri = $cgi->url(-absolute => 1);

> +		my $sname = $ENV{'SCRIPT_NAME'};
> +		$base =~ s,\Q$sname\E$,,;
> +		$base .= "/";

I don't think that is required; neither of $my_url and $my_uri ends
with '/' after stripping path info:

  our $path_info = $ENV{"PATH_INFO"};
  if ($path_info) {
  	$my_url =~ s,\Q$path_info\E$,,;
  	$my_uri =~ s,\Q$path_info\E$,,;
  }

and if BASE is a document, then relative URLs are resolved using
dirname of BASE, I guess, as
  http://www.w3.org/TR/html401/struct/links.html#edef-BASE
contains in example:
  <BASE href="http://www.aviary.com/products/intro.html">

See also RFC1808 (Relative Uniform Resource Locators), section
4.  Resolving Relative URLs:

   Step 6: The last segment of the base URL's path (anything
           following the rightmost slash "/", or the entire path if no
           slash is present) is removed and the embedded URL's path is
           appended in its place.[...]

Besides, if you strip SCRIPT_NAME, then you are left with document
root; this means that if git-logo.png etc. are in the same directory
as gitweb.cgi, they won't be found.  For example for me it doesn't
work correctly (I have git-logo.png along gitweb.cgi, which is in
/cgi-bin/gitweb/... and thanks to symlinks also in /gitweb/).


By the way, according to documentation $cgi->url() should *not*
contain path_info; you have to use $cgi->url(-path_info=>1) for
that... strange.

> +		print "<base href=\"$base\"/>\n";

Just in case, to be compatible with both XHML and HTML, we should use

+		print "<base href=\"$base\" />\n";

...if not for the fact that surrounding code doesn't use this way...

> +	}
>  # print out each stylesheet that exist
>  	if (defined $stylesheet) {
>  #provides backwards capability for those people who define style sheet in a config file
> -- 
> 1.5.6.5
> 
> 

-- 
Jakub Narebski
Poland

  reply	other threads:[~2009-01-28  0:16 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-27 13:29 [PATCHv3] gitweb: make static files accessible with PATH_INFO Giuseppe Bilotta
2009-01-28  0:14 ` Jakub Narebski [this message]
2009-01-28  0:43   ` Giuseppe Bilotta
2009-01-28  0:55     ` Jakub Narebski
2009-01-28  0:58       ` 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=200901280114.59388.jnareb@gmail.com \
    --to=jnareb@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=giuseppe.bilotta@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 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.