{"thread":{"id":"5515","subject":"gitweb: Add committags support","startedAt":"2006-09-08T10:46:56Z","lastAt":"2006-09-08T20:57:59Z","messageCount":2,"participants":["Jakub Narebski"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"26579","messageId":"200609081246.56423.jnareb@gmail.com","threadId":"5515","inReplyTo":null,"subject":"gitweb: Add committags support","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2006-09-08T10:46:56Z","receivedAt":"2006-09-08T10:46:56Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Below is very preliminary code (think early alpha) \nto add committags support (a la gitweb-xmms2) to gitweb.\n\nOne of the problems is having committags support \nin the subject/title line, which is hyperlink itself \n(with title and class attribute).\n\n-- >8 --\nour %committags = (\n\t'commitsha' => {\n\t\t'pattern' => qr/[0-9a-fA-F]{40}/,\n\t\t'sub' => sub {\n\t\t\tmy $hash_text = shift;\n\t\t\tif (git_get_type($hash_text) eq \"commit\") {\n\t\t\t\treturn\n\t\t\t\t\t$cgi->a({-href => href(action=>\"commit\", hash=>$hash_text),\n\t\t\t\t\t        -class => \"text\"}, $hash_text);\n\t\t\t}\n\t\t\treturn undef;\n\t\t},\n\t\t'islink' => 1,\n\t},\n\t'mantis' => {\n\t\t'pattern' => qr/(BUG|FEATURE)\\(\\d+\\)/,\n\t\t'options' => [ 'http://bugs.xmms2.xmms.se/view.php?id=' ],\n\t\t'sub' => sub {\n\t\t\tmy $match = shift;\n\t\t\tmy $URL = shift;\n\t\t\tmy ($issue) = $match =~ /(\\d+)/;\n\t\t\treturn\n\t\t\t\t$cgi->a({-href => \"$URL$issue\"},\n\t\t\t\t        $match);\n\t\t},\n\t\t'islink' => 1,\n\t},\n);\n\nsub format_log_line_html_generic {\n\tmy $line = shift;\n\tmy $a_attr = shift;\n\tmy @committags = @_;\n\tmy %subst;\n\n\t$line = esc_html($line);\n\t$line =~ s/ /&nbsp;/g;\n\t\n\tfor my $ctname (@committags) {\n\t\tnext unless exists $committags{$ctname};\n\t\tmy $wrap = ref($a_attr) eq \"HASH\" && %$a_attr &&\n\t\t\t$committags{$ctname}{'islink'};\n\t\tmy @opts =\n\t\t\texists $committags{$ctname}{'options'} ?\n\t\t\t@{$committags{$ctname}{'options'}} :\n\t\t\t();\n\n\t\twhile ($line =~ m/($committags{$ctname}{'pattern'})/gc) {\n\t\t\tmy $match = $1;\n\t\t\tmy $repl = $committags{$ctname}{'sub'}->($match, @opts);\n\t\t\tnext unless $repl;\n\n\t\t\tif ($wrap) {\n\t\t\t\t$repl = $cgi->end_a() . $repl . $cgi->start_a($a_attr);\n\t\t\t}\n\n\t\t\t$subst{quotemeta $match} = $repl;\n\t\t}\n\t}\n\n\twhile (my ($from, $to) = each %subst) {\n\t\t$line =~ s/$from/$to/g;\n\t}\n\treturn $line;\n}\n\n\n\nforeach my $line (@log) {\n\tprint format_log_line_html_generic($line, undef, keys %committags) . \"<br/>\\n\";\n#\tprint format_log_line_html_generic($line, {-href=>\"href\", -title => \"TITEL\"}, keys %committags) . \"<br/>\\n\";\n}\n\n-- \nJakub Narebski\nPoland\n"},{"id":"26592","messageId":"edslfm$tb9$1@sea.gmane.org","threadId":"5515","inReplyTo":"200609081246.56423.jnareb@gmail.com","subject":"Re: gitweb: Add committags support","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2006-09-08T20:57:59Z","receivedAt":"2006-09-08T20:57:59Z","isPatch":false,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Jakub Narebski wrote:\n\n> our %committags = (\n>         'commitsha' => {\n>                 'pattern' => qr/[0-9a-fA-F]{40}/,\n>                 'sub' => sub {\n>                         my $hash_text = shift;\n>                         if (git_get_type($hash_text) eq \"commit\") {\n>                                 return\n>                                         $cgi->a({-href => href(action=>\"commit\", hash=>$hash_text),\n>                                                 -class => \"text\"}, $hash_text);\n>                         }\n>                         return undef;\n>                 },\n>                 'islink' => 1,\n>         },\n>         'mantis' => {\n>                 'pattern' => qr/(BUG|FEATURE)\\(\\d+\\)/,\n>                 'options' => [ 'http://bugs.xmms2.xmms.se/view.php?id=' ],\n>                 'sub' => sub {\n>                         my $match = shift;\n>                         my $URL = shift;\n>                         my ($issue) = $match =~ /(\\d+)/;\n>                         return\n>                                 $cgi->a({-href => \"$URL$issue\"},\n>                                         $match);\n>                 },\n>                 'islink' => 1,\n>         },\n> );\n\nYet another committag:\n\n        'URL' => { # simple URL, no query strings\n                   # because of the whole esc_html() + ' '->'&nbsp;' thing\n                'pattern' => qr!(http|ftp)s?://[a-zA-Z0-9%./]+!,\n                'sub' => sub {\n                        my $url = shift;\n                        return\n                                $cgi->a({-href => $url},\n                                        $url); # should be perhaps shortened\n                },\n                'islink' => 1,\n        },\n\n-- \nJakub Narebski\nWarsaw, Poland\nShadeHawk on #git\n"}]}