]> Lady’s Gitweb - Gitweb/commitdiff
gitweb: Change appereance of marker of refs pointing to given object
authorJakub Narebski <redacted>
Mon, 14 Aug 2006 00:14:20 +0000 (02:14 +0200)
committerLady <redacted>
Mon, 6 Apr 2026 04:05:47 +0000 (00:05 -0400)
Change git_get_references to include type of ref in the %refs value, which
means putting everything after 'refs/' as a ref name, not only last
part of the name.  Instead of separating refs pointing to the same
object by " / " separator, use anonymous array reference to store all
refs pointing to given object.

Use 'git-ls-remote .' if $projectroot/$project/info/refs does not
exist.  (Perhaps it should be used always.)

Refs are now in separate span elements.  Class is dependent on the ref
type: currently known classes are 'tag', 'head', 'remote', and 'ref'
(last one for HEAD and other refs in the main directory).  There is
encompassing span element of class refs, just in case of unknown ref
type.

This might be considered cleaner separating of git_get_references into
filling %refs hash only, and not taking part in formatting ref marker.

Signed-off-by: Jakub Narebski <redacted>
Signed-off-by: Junio C Hamano <redacted>
gitweb.css
gitweb.perl

index 641381226a0e6ffa3d7069edb6f4d6a82761d1865ee6230b967749d652e32ff8..c0025c666c9cb40acc8ff42b11d513f184835e90e50e51badfa030aca6a17091 100644 (file)
@@ -326,15 +326,30 @@ a.rss_logo:hover {
        background-color: #ee5500;
 }
 
        background-color: #ee5500;
 }
 
-span.tag {
+span.refs span {
        padding: 0px 4px;
        font-size: 10px;
        font-weight: normal;
        padding: 0px 4px;
        font-size: 10px;
        font-weight: normal;
-       background-color: #ffffaa;
        border: 1px solid;
        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;
 }
 
        border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
 }
 
+span.refs span.head {
+       background-color: #aaffaa;
+       border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
+}
+
 span.atnight {
        color: #cc0000;
 }
 span.atnight {
        color: #cc0000;
 }
index 851b09d612ac47755b924d7d4c7b893d719543689b78cd43f1c765aae0749384..5a94c621a2db21155da69c106d9ac9535eac284feded1986dc9917b6db6a594a 100755 (executable)
@@ -364,9 +364,26 @@ sub format_log_line_html {
 # format marker of refs pointing to given object
 sub format_ref_marker {
        my ($refs, $id) = @_;
 # format marker of refs pointing to given object
 sub format_ref_marker {
        my ($refs, $id) = @_;
+       my $markers = '';
 
        if (defined $refs->{$id}) {
 
        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 "";
        }
        } else {
                return "";
        }
@@ -561,18 +578,24 @@ sub git_get_project_owner {
 sub git_get_references {
        my $type = shift || "";
        my %refs;
 sub git_get_references {
        my $type = shift || "";
        my %refs;
+       my $fd;
        # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c      refs/tags/v2.6.11
        # c39ae07f393806ccf406ef966e9a15afc43cc36a      refs/tags/v2.6.11^{}
        # 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;
        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}) {
                        if (defined $refs{$1}) {
-                               $refs{$1} .= " / $2";
+                               push @{$refs{$1}}, $2;
                        } else {
                        } else {
-                               $refs{$1} = $2;
+                               $refs{$1} = [ $2 ];
                        }
                }
        }
                        }
                }
        }
This page took 0.261974 seconds and 4 git commands to generate.