# https://stackoverflow.com/questions/8321649/gitweb-how-to-display-markdown-file-in-html-format-automatically-like-github --- gitweb.cgi.orig 2020-10-06 10:13:45.621810025 +0100 +++ gitweb.cgi 2020-10-06 10:08:21.651823286 +0100 @@ -18,9 +18,10 @@ use Encode; use Fcntl ':mode'; use File::Find qw(); -use File::Basename qw(basename); +use File::Basename qw(basename dirname); use Time::HiRes qw(gettimeofday tv_interval); use Digest::MD5 qw(md5_hex); +use File::Spec; # hack binmode STDOUT, ':utf8'; @@ -6644,6 +6645,20 @@ print "\n\n"; # class="readme" } + # hack + if (!$prevent_xss) { + $file_name = "README.md"; + my $proj_head_hash = git_get_head_hash($project); + my $readme_blob_hash = git_get_hash_by_path($proj_head_hash, "README.md", "blob"); + + if ($readme_blob_hash) { # if README.md exists + print "
$file_name
\n"; + print "
"; # TODO find/create a better CSS class than page_body + print get_markdown($file_name, $readme_blob_hash); + print "
"; + } + } + # we need to request one more than 16 (0..15) to check if # those 16 are all my @commitlist = $head ? parse_commits($head, 17) : (); @@ -7117,6 +7132,9 @@ my $syntax = guess_file_syntax($highlight, $file_name); $fd = run_highlighter($fd, $highlight, $syntax); + # hack + my $ismarkdown = ($file_name =~ /md$/); + git_header_html(undef, $expires); my $formats_nav = ''; if (defined $hash_base && (my %co = parse_commit($hash_base))) { @@ -7160,6 +7178,10 @@ esc_attr(href(action=>"blob_plain", hash=>$hash, hash_base=>$hash_base, file_name=>$file_name)) . qq!" />\n!; + } elsif ($ismarkdown) { + print qq!
\n!; + print get_markdown($file_name, $hash); + print qq!
\n!; # $cmd_markdownify } else { my $nr; while (my $line = <$fd>) { @@ -7177,6 +7199,79 @@ git_footer_html(); } +# hack +sub get_norm_rel_path { # http://www.perlmonks.org/bare/?node_id=11907 + my $unnormpath = shift; + while ($unnormpath =~ m!/\.!) { + $unnormpath =~ s!/[^\/]+/\.\.!!; + # print "Path is now -+$unnormpath+-\n"; + } + return $unnormpath; +} +sub get_markdown { + my $tfilename = shift; + my $thash = shift; + my $rethtmlstr = ""; + use open ":encoding(utf8)"; # needed to have utf8 survive through the shell pipe + my $cmd_markdownify = $GIT . " " . git_cmd() . " cat-file blob " . $thash . " | perl -e 'my \$str = do { local \$/; }; \$str =~ s/