aboutsummaryrefslogtreecommitdiff
path: root/gitweb
diff options
context:
space:
mode:
Diffstat (limited to 'gitweb')
-rw-r--r--gitweb/gitweb.css19
-rwxr-xr-xgitweb/gitweb.perl37
2 files changed, 47 insertions, 9 deletions
diff --git a/gitweb/gitweb.css b/gitweb/gitweb.css
index f58a418fa..21ce99cc9 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 6be6c5500..4fe3fc7b4 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 ];
}
}
}