diff --git a/gitweb/gitweb.cgi b/gitweb/gitweb.cgi index 1ff29bc2918d203715709930a34fe082d60e579a..2f1731870d77855a97d24263bf7869107af4955c 100755 --- a/gitweb/gitweb.cgi +++ b/gitweb/gitweb.cgi @@ -1024,6 +1024,8 @@ sub read_info_ref { open my $fd, "$projectroot/$project/info/refs" or return; while (my $line = <$fd>) { chomp $line; + # attention: for $type == "" it saves only last path part of ref name + # e.g. from 'refs/heads/jn/gitweb' it would leave only 'gitweb' if ($line =~ m/^([0-9a-fA-F]{40})\t.*$type\/([^\^]+)/) { if (defined $refs{$1}) { $refs{$1} .= " / $2"; @@ -1036,6 +1038,16 @@ sub read_info_ref { return \%refs; } +sub git_get_referencing { + my ($refs, $id) = @_; + + if (defined $refs->{$id}) { + return ' ' . esc_html($refs->{$id}) . ''; + } else { + return ""; + } +} + sub git_read_refs { my $ref_dir = shift; my @reflist; @@ -1151,10 +1163,7 @@ sub git_summary { } $alternate ^= 1; if ($i-- > 0) { - my $ref = ""; - if (defined $refs->{$commit}) { - $ref = " " . esc_html($refs->{$commit}) . ""; - } + my $ref = git_get_referencing($refs, $commit); print "$co{'age_string'}\n" . "" . esc_html(chop_str($co{'author_name'}, 10)) . "\n" . ""; @@ -1728,10 +1737,7 @@ sub git_tree { $/ = "\n"; my $refs = read_info_ref(); - my $ref = ""; - if (defined $refs->{$hash_base}) { - $ref = " " . esc_html($refs->{$hash_base}) . ""; - } + my $ref = git_get_referencing($refs, $hash_base); git_header_html(); my $base_key = ""; my $base = ""; @@ -1912,10 +1918,7 @@ sub git_log { } for (my $i = ($page * 100); $i <= $#revlist; $i++) { my $commit = $revlist[$i]; - my $ref = ""; - if (defined $refs->{$commit}) { - $ref = " " . esc_html($refs->{$commit}) . ""; - } + my $ref = git_get_referencing($refs, $commit); my %co = git_read_commit($commit); next if !%co; my %ad = date_str($co{'author_epoch'}); @@ -1979,16 +1982,13 @@ sub git_commit { $expires = "+1d"; } my $refs = read_info_ref(); - my $ref = ""; - if (defined $refs->{$co{'id'}}) { - $ref = " " . esc_html($refs->{$co{'id'}}) . ""; - } - git_header_html(undef, $expires); + my $ref = git_get_referencing($refs, $co{'id'}); my $formats_nav = ''; if (defined $file_name && defined $co{'parent'}) { my $parent = $co{'parent'}; $formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;hb=$parent;f=$file_name")}, "blame"); } + git_header_html(undef, $expires); git_page_nav('commit', defined $co{'parent'} ? '' : 'commitdiff', $hash, $co{'tree'}, $hash, $formats_nav); @@ -1996,7 +1996,7 @@ sub git_commit { if (defined $co{'parent'}) { git_header_div('commitdiff', esc_html($co{'title'}) . $ref, $hash); } else { - git_header_div('tree', esc_html($co{'title'}), $co{'tree'}, $hash); + git_header_div('tree', esc_html($co{'title'}) . $ref, $co{'tree'}, $hash); } print "
\n" . "\n"; @@ -2206,13 +2206,10 @@ sub git_commitdiff { $expires = "+1d"; } my $refs = read_info_ref(); - my $ref = ""; - if (defined $refs->{$co{'id'}}) { - $ref = " " . esc_html($refs->{$co{'id'}}) . ""; - } - git_header_html(undef, $expires); + my $ref = git_get_referencing($refs, $co{'id'}); my $formats_nav = $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commitdiff_plain;h=$hash;hp=$hash_parent")}, "plain"); + git_header_html(undef, $expires); git_page_nav('commitdiff','', $hash,$co{'tree'},$hash, $formats_nav); git_header_div('commit', esc_html($co{'title'}) . $ref, $hash); print "
\n"; @@ -2364,10 +2361,7 @@ sub git_history { if (!%co) { next; } - my $ref = ""; - if (defined $refs->{$commit}) { - $ref = " " . esc_html($refs->{$commit}) . ""; - } + my $ref = git_get_referencing($refs, $commit); if ($alternate) { print "
\n"; } else { @@ -2559,10 +2553,7 @@ sub git_shortlog { my $alternate = 0; for (my $i = ($page * 100); $i <= $#revlist; $i++) { my $commit = $revlist[$i]; - my $ref = ""; - if (defined $refs->{$commit}) { - $ref = " " . esc_html($refs->{$commit}) . ""; - } + my $ref = git_get_referencing($refs, $commit); my %co = git_read_commit($commit); my %ad = date_str($co{'author_epoch'}); if ($alternate) {