gitweb: disambiguate heads and tags withs the same name
Avoid wrong disambiguation that would link logs/trees of tags and heads which share the same name to the same page, leading to a disambiguation that would prefer the tag, thus making it impossible to access the corresponding head log and tree without hacking the url by hand. It does it by using full refname (with 'refs/heads/' or 'refs/tags/' prefix) instead of shortened one in the URLs in 'heads' and 'tags' tables. This makes URLs (and refs) provided by gitweb unambiguous. Signed-off-by: Guillaume Seguin <guillaume@segu.in> Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
718a087a47
commit
bf901f8e74
@ -2233,6 +2233,7 @@ sub git_get_heads_list {
|
||||
my ($hash, $name, $title) = split(' ', $refinfo, 3);
|
||||
my ($committer, $epoch, $tz) =
|
||||
($committerinfo =~ /^(.*) ([0-9]+) (.*)$/);
|
||||
$ref_item{'fullname'} = $name;
|
||||
$name =~ s!^refs/heads/!!;
|
||||
|
||||
$ref_item{'name'} = $name;
|
||||
@ -2270,6 +2271,7 @@ sub git_get_tags_list {
|
||||
my ($id, $type, $name, $refid, $reftype, $title) = split(' ', $refinfo, 6);
|
||||
my ($creator, $epoch, $tz) =
|
||||
($creatorinfo =~ /^(.*) ([0-9]+) (.*)$/);
|
||||
$ref_item{'fullname'} = $name;
|
||||
$name =~ s!^refs/tags/!!;
|
||||
|
||||
$ref_item{'type'} = $type;
|
||||
@ -3690,8 +3692,8 @@ sub git_tags_body {
|
||||
"<td class=\"link\">" . " | " .
|
||||
$cgi->a({-href => href(action=>$tag{'reftype'}, hash=>$tag{'refid'})}, $tag{'reftype'});
|
||||
if ($tag{'reftype'} eq "commit") {
|
||||
print " | " . $cgi->a({-href => href(action=>"shortlog", hash=>$tag{'name'})}, "shortlog") .
|
||||
" | " . $cgi->a({-href => href(action=>"log", hash=>$tag{'name'})}, "log");
|
||||
print " | " . $cgi->a({-href => href(action=>"shortlog", hash=>$tag{'fullname'})}, "shortlog") .
|
||||
" | " . $cgi->a({-href => href(action=>"log", hash=>$tag{'fullname'})}, "log");
|
||||
} elsif ($tag{'reftype'} eq "blob") {
|
||||
print " | " . $cgi->a({-href => href(action=>"blob_plain", hash=>$tag{'refid'})}, "raw");
|
||||
}
|
||||
@ -3726,13 +3728,13 @@ sub git_heads_body {
|
||||
$alternate ^= 1;
|
||||
print "<td><i>$ref{'age'}</i></td>\n" .
|
||||
($curr ? "<td class=\"current_head\">" : "<td>") .
|
||||
$cgi->a({-href => href(action=>"shortlog", hash=>$ref{'name'}),
|
||||
$cgi->a({-href => href(action=>"shortlog", hash=>$ref{'fullname'}),
|
||||
-class => "list name"},esc_html($ref{'name'})) .
|
||||
"</td>\n" .
|
||||
"<td class=\"link\">" .
|
||||
$cgi->a({-href => href(action=>"shortlog", hash=>$ref{'name'})}, "shortlog") . " | " .
|
||||
$cgi->a({-href => href(action=>"log", hash=>$ref{'name'})}, "log") . " | " .
|
||||
$cgi->a({-href => href(action=>"tree", hash=>$ref{'name'}, hash_base=>$ref{'name'})}, "tree") .
|
||||
$cgi->a({-href => href(action=>"shortlog", hash=>$ref{'fullname'})}, "shortlog") . " | " .
|
||||
$cgi->a({-href => href(action=>"log", hash=>$ref{'fullname'})}, "log") . " | " .
|
||||
$cgi->a({-href => href(action=>"tree", hash=>$ref{'fullname'}, hash_base=>$ref{'name'})}, "tree") .
|
||||
"</td>\n" .
|
||||
"</tr>";
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user