From 62cb152784d956cc22c356cfe3df61e712fbe196 Mon Sep 17 00:00:00 2001 From: patrick-scho Date: Sat, 29 Nov 2025 13:58:52 +0100 Subject: [PATCH] gitweb patch to display markdown https://stackoverflow.com/a/36593115 https://gist.github.com/johnlane/b0eb78dc97694d3a42d8dedcc6a5d095 --- gitweb/gitweb.perl | 96 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index b5490df..ed1dacd 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -18,7 +18,8 @@ use CGI::Carp qw(fatalsToBrowser set_message); use Encode; use Fcntl ':mode'; use File::Find qw(); -use File::Basename qw(basename); +use File::Basename qw(basename dirname); +use File::Spec; use Time::HiRes qw(gettimeofday tv_interval); use Digest::MD5 qw(md5_hex); @@ -6662,6 +6663,19 @@ sub git_summary { print "\n\n"; # class="readme" } + 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) : (); @@ -7136,6 +7150,8 @@ sub git_blob { my $syntax = guess_file_syntax($highlight, $file_name); $fd = run_highlighter($fd, $highlight, $syntax); + my $ismarkdown = ($file_name =~ /md$/); + git_header_html(undef, $expires); my $formats_nav = ''; if (defined $hash_base && (my %co = parse_commit($hash_base))) { @@ -7179,7 +7195,11 @@ sub git_blob { esc_attr(href(action=>"blob_plain", hash=>$hash, hash_base=>$hash_base, file_name=>$file_name)) . qq!" />\n!; - } else { + } elsif ($ismarkdown) { + print qq!
\n!; + print get_markdown($file_name, $hash); + print qq!
\n!; # $cmd_markdownify + } else { my $nr; while (my $line = <$fd>) { chomp $line; @@ -7196,6 +7216,78 @@ sub git_blob { git_footer_html(); } +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/