[PATCH 1/2] gitweb: fix #patchNN anchors when path_info is enabled
From: Kevin Cernekee <cernekee@gmail.com>
Date: 2016-06-15 22:50:47
Subsystem:
the rest · Maintainer:
Linus Torvalds
My configuration is as follows:
$feature{'pathinfo'}{'default'} = [1];
<Location /gitweb>
Options ExecCGI
SetHandler cgi-script
</Location>
GITWEB_{JS,CSS,LOGO,...} all start with gitweb-static/
gitweb.cgi renamed to /var/www/html/gitweb
This gives me simple, easy-to-read URLs that look like:
http://HOST/gitweb/myproject.git/commitdiff/0faa4a6ef921d8a233f30d66f9a3e1b24e8ec906
The problem is that in this configuration, PATH_INFO is used to set the
base URL:
<base href="http://HOST/gitweb">
This breaks the "patch" anchor links seen on the commitdiff pages,
because they are computed relative to the base URL:
http://HOST/gitweb#patch1
My solution is to add an "anchor" parameter to href(), so that the full
path is included in the patchNN links.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
---
gitweb/gitweb.perl | 31 +++++++++++++++++++++++++------
1 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 1b9369d..3b6a90d 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl@@ -1199,6 +1199,7 @@ if (defined caller) { # -full => 0|1 - use absolute/full URL ($my_uri/$my_url as base) # -replay => 1 - start from a current view (replay with modifications) # -path_info => 0|1 - don't use/use path_info URL (if possible) +# -anchor - add #ANCHOR to end of URL sub href { my %params = @_; # default is to use -absolute url() i.e. $my_uri
@@ -1314,6 +1315,10 @@ sub href { # final transformation: trailing spaces must be escaped (URI-encoded) $href =~ s/(\s+)$/CGI::escape($1)/e; + if (defined($params{'anchor'})) { + $href .= "#".esc_param($params{'anchor'}); + } + return $href; }
@@ -4334,8 +4339,10 @@ sub git_difftree_body { if ($action eq 'commitdiff') { # link to patch $patchno++; - print "<td class=\"link\">" . - $cgi->a({-href => "#patch$patchno"}, "patch") . + print $cgi->a({-href => + href(action=>"commitdiff", + hash=>$hash, anchor=>"patch$patchno")}, + "patch") . " | " . "</td>\n"; }
@@ -4432,7 +4439,10 @@ sub git_difftree_body { if ($action eq 'commitdiff') { # link to patch $patchno++; - print $cgi->a({-href => "#patch$patchno"}, "patch"); + print $cgi->a({-href => + href(action=>"commitdiff", + hash=>$hash, anchor=>"patch$patchno")}, + "patch"); print " | "; } print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'to_id'},
@@ -4452,7 +4462,10 @@ sub git_difftree_body { if ($action eq 'commitdiff') { # link to patch $patchno++; - print $cgi->a({-href => "#patch$patchno"}, "patch"); + print $cgi->a({-href => + href(action=>"commitdiff", + hash=>$hash, anchor=>"patch$patchno")}, + "patch"); print " | "; } print $cgi->a({-href => href(action=>"blob", hash=>$diff->{'from_id'},
@@ -4494,7 +4507,10 @@ sub git_difftree_body { if ($action eq 'commitdiff') { # link to patch $patchno++; - print $cgi->a({-href => "#patch$patchno"}, "patch") . + print $cgi->a({-href => + href(action=>"commitdiff", + hash=>$hash, anchor=>"patch$patchno")}, + "patch") . " | "; } elsif ($diff->{'to_id'} ne $diff->{'from_id'}) { # "commit" view and modified file (not onlu mode changed)
@@ -4539,7 +4555,10 @@ sub git_difftree_body { if ($action eq 'commitdiff') { # link to patch $patchno++; - print $cgi->a({-href => "#patch$patchno"}, "patch") . + print $cgi->a({-href => + href(action=>"commitdiff", + hash=>$hash, anchor=>"patch$patchno")}, + "patch") . " | "; } elsif ($diff->{'to_id'} ne $diff->{'from_id'}) { # "commit" view and modified file (not only pure rename or copy)
--
1.7.4.1