diff options
-rw-r--r-- | gitweb/gitweb.css | 19 | ||||
-rwxr-xr-x | gitweb/gitweb.perl | 37 |
2 files changed, 47 insertions, 9 deletions
diff --git a/gitweb/gitweb.css b/gitweb/gitweb.css index f58a418fab..21ce99cc91 100644 --- a/gitweb/gitweb.css +++ b/gitweb/gitweb.css @@ -326,15 +326,30 @@ a.rss_logo:hover { background-color: #ee5500; } -span.tag { +span.refs span { padding: 0px 4px; font-size: 10px; font-weight: normal; - background-color: #ffffaa; border: 1px solid; + background-color: #ffaaff; + border-color: #ffccff #ff00ee #ff00ee #ffccff; +} + +span.refs span.ref { + background-color: #aaaaff; + border-color: #ccccff #0033cc #0033cc #ccccff; +} + +span.refs span.tag { + background-color: #ffffaa; border-color: #ffffcc #ffee00 #ffee00 #ffffcc; } +span.refs span.head { + background-color: #aaffaa; + border-color: #ccffcc #00cc33 #00cc33 #ccffcc; +} + span.atnight { color: #cc0000; } diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 6be6c55009..4fe3fc7b44 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -364,9 +364,26 @@ sub format_log_line_html { # format marker of refs pointing to given object sub format_ref_marker { my ($refs, $id) = @_; + my $markers = ''; if (defined $refs->{$id}) { - return ' <span class="tag">' . esc_html($refs->{$id}) . '</span>'; + foreach my $ref (@{$refs->{$id}}) { + my ($type, $name) = qw(); + # e.g. tags/v2.6.11 or heads/next + if ($ref =~ m!^(.*?)s?/(.*)$!) { + $type = $1; + $name = $2; + } else { + $type = "ref"; + $name = $ref; + } + + $markers .= " <span class=\"$type\">" . esc_html($name) . "</span>"; + } + } + + if ($markers) { + return ' <span class="refs">'. $markers . '</span>'; } else { return ""; } @@ -561,18 +578,24 @@ sub git_get_project_owner { sub git_get_references { my $type = shift || ""; my %refs; + my $fd; # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11 # c39ae07f393806ccf406ef966e9a15afc43cc36a refs/tags/v2.6.11^{} - open my $fd, "$projectroot/$project/info/refs" or return; + if (-f "$projectroot/$project/info/refs") { + open $fd, "$projectroot/$project/info/refs" + or return; + } else { + open $fd, "-|", $GIT, "ls-remote", "." + 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 ($line =~ m/^([0-9a-fA-F]{40})\trefs\/($type\/?[^\^]+)/) { if (defined $refs{$1}) { - $refs{$1} .= " / $2"; + push @{$refs{$1}}, $2; } else { - $refs{$1} = $2; + $refs{$1} = [ $2 ]; } } } |