Now displays author of GPG signature.
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Tue, 11 Oct 2016 09:27:26 +0000 (11:27 +0200)
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Tue, 11 Oct 2016 09:27:26 +0000 (11:27 +0200)
gitweb.cgi
static/gitweb.css

index 7724a1f..c019b20 100755 (executable)
@@ -34,6 +34,7 @@ BEGIN {
 our $version = "2.1.4";
 
 our ($my_url, $my_uri, $base_url, $path_info, $home_link);
+our %sig_table; # Table for commit signature status
 sub evaluate_uri {
        our $cgi;
 
@@ -2552,7 +2553,7 @@ sub format_snapshot_links {
                                        hash=>$hash,
                                        snapshot_format=>$_
                                )
-                       },'<span class="octicon octicon-package"></span> '. $known_snapshot_formats{$_}{'display'})
+                       },'<span class="octicon octicon-package"></span>&nbsp;'. $known_snapshot_formats{$_}{'display'})
                , @snapshot_fmts) . ")";
        } elsif ($num_fmts == 1) {
                # A single "snapshot" link whose tooltip bears the format name.
@@ -2566,7 +2567,7 @@ sub format_snapshot_links {
                                        snapshot_format=>$fmt
                                ),
                                -title => "in format: $known_snapshot_formats{$fmt}{'display'}"
-                       }, '<span class="octicon octicon-package"></span> '. "snapshot");
+                       }, '<span class="octicon octicon-package"></span>&nbsp;'. "snapshot");
        } else { # $num_fmts == 0
                return undef;
        }
@@ -3535,18 +3536,22 @@ sub parse_commit_text {
 
 sub build_commit_sig_table {
 #  my @commits = `git log --pretty="format:%H %G?"`;
-  open my $fd, "-|", git_cmd(), "log", '--pretty=%H %G?' or return;
+  open my $fd, "-|", git_cmd(), "log", '--pretty=%H:%G?:%GS' or return;
+  binmode $fd, ":utf8";
   my @commits = <$fd>;
   close $fd;
   my %ch;
   my $commit;
   my $signed;
+  my $username;
+  my @things;
   open TMP, ">/tmp/commit";
   foreach (@commits) {
     print TMP $_;
-    ($commit,$signed) = split(" ",$_);
+    ($commit,$signed,$username) = split(":",$_);
     if ((defined $commit) and (defined $signed)) {
-      $ch{$commit} = $signed;
+      @things = ($signed, $username);
+      $ch{$commit} = \@things;
     }
   }
   return %ch;
@@ -3555,10 +3560,13 @@ sub build_commit_sig_table {
 
 sub verify_commit {
   my %co = @_;
-  my %table = build_commit_sig_table();
-  if (defined $table{$co{'id'}}) {
-    if ($table{$co{'id'}} eq 'U' or $table{$co{'id'}} eq 'G') {
-      return '<span class="octicon octicon-verified" title="GPG signed commit"></span> ';
+  unless (%sig_table) {
+    %sig_table = build_commit_sig_table();
+  }
+  if (defined $sig_table{$co{'id'}} and my ($status, $id) = @{$sig_table{$co{'id'}}}) {
+
+    if ($status eq 'U' or $status eq 'G') {
+      return '<span class="verif"><span class="octicon octicon-verified" title="GPG signed commit"></span> <span class="commiter">Signed by: '.$cgi->escapeHTML($id)."</span></span>";
     }
   }
   return '<span class="octicon octicon-unverified" title="Unsigned commit"></span> ';
index 8b78b38..baff7d8 100644 (file)
@@ -4,6 +4,7 @@ body {
        font-size: small;
        border: solid #d9d8d1;
        border-width: 1px;
+       border-radius: 7px;
        margin: 10px;
        background-color: #ffffff;
        color: #000000;
@@ -50,11 +51,13 @@ a.list img.avatar {
 }
 
 div.page_header {
-       height: 25px;
-       padding: 8px;
-       font-size: 150%;
-       font-weight: bold;
-       background-color: #d9d8d1;
+    margin-top: -1px;
+    border-radius: 7px 7px 0 0;
+    height: 25px;
+    padding: 8px;
+    font-size: 150%;
+    font-weight: bold;
+    background-color: #d9d8d1;
 }
 
 div.page_header a:visited, a.header {
@@ -123,9 +126,11 @@ div.page_path {
 }
 
 div.page_footer {
-       height: 22px;
-       padding: 4px 8px;
-       background-color: #d9d8d1;
+    border-radius: 0 0 7px 7px ;
+    margin-bottom: -1px;
+    height: 22px;
+    padding: 4px 8px;
+    background-color: #d9d8d1;
 }
 
 div.page_footer_text {
@@ -769,10 +774,37 @@ div.heads a:hover {
     background: #0c0;
 }
 
-.octicon-verified {
+.verif .octicon-verified {
     color: #0a0;
 }
 
+.verif {
+    padding: 6px;
+}
+.verif:hover {
+    color: #fff;
+    background: #0a0;
+    border-radius: 5px;
+    box-shadow: 1px 1px 2px 2px #aaa;
+    display: block;
+    position: absolute;
+    margin-top: -0.5em;
+}
+
+.verif .commiter {
+    display: none;
+    color: #fff;
+}
+.verif:hover .octicon-verified {
+    color: #fff;
+}
+
+.verif:hover .commiter {
+       display: inline;
+       z-index: 1000;
+}
+
+
 /* Style definition generated by highlight 2.4.5, http://www.andre-simon.de/ */
 
 /* Highlighting theme definition: */