Added feature to gitweb tree mode: In current directory, display README if available.
[gitweb-sgk] / gitweb.cgi
index f7536d2..a3b31ce 100755 (executable)
@@ -3846,6 +3846,37 @@ sub insert_file {
        close $fd;
 }
 
        close $fd;
 }
 
+sub insert_html_file {
+       my $file_name = shift;
+       insert_file($file_name);
+}
+
+sub insert_text_file {
+       my $file_name = shift;
+
+       open my $fd, $file_name or die_error(500, "Couldn't open $file_name");
+
+       print "<pre>";
+       while (my $line = <$fd>) {
+               print to_utf8($line);
+       }
+       print "</pre>";
+}
+
+sub insert_markdown_file {
+       my $file_name = shift;
+
+       # TODO: Make this a config option?
+       my $markdown_cmd = "/usr/bin/markdown";
+
+       open my $fd, quote_command($markdown_cmd, $file_name)." |"
+               or die_error(500, "Couldn't open $file_name");
+
+       while (my $line = <$fd>) {
+               print to_utf8($line);
+       }
+}
+
 ## ......................................................................
 ## mimetype related functions
 
 ## ......................................................................
 ## mimetype related functions
 
@@ -4549,8 +4580,10 @@ sub git_print_page_path {
 
 
        print "<div class=\"page_path\">";
 
 
        print "<div class=\"page_path\">";
+       my $pretty_project = $project;
+       $pretty_project =~ s/\/\.git$//;
        print $cgi->a({-href => href(action=>"tree", hash_base=>$hb),
        print $cgi->a({-href => href(action=>"tree", hash_base=>$hb),
-                     -title => 'tree root'}, to_utf8("[$project]"));
+                     -title => 'tree root'}, to_utf8("[$pretty_project]"));
        print " / ";
        if (defined $name) {
                my @dirname = split '/', $name;
        print " / ";
        if (defined $name) {
                my @dirname = split '/', $name;
@@ -5727,9 +5760,11 @@ sub git_project_list_rows {
                        }
                        print "</td>\n";
                }
                        }
                        print "</td>\n";
                }
+               my $pretty_path = $pr->{'path'};
+               $pretty_path =~ s/\/\.git$//;
                print "<td>" . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"summary"),
                                        -class => "list"},
                print "<td>" . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"summary"),
                                        -class => "list"},
-                                      esc_html_match_hl($pr->{'path'}, $search_regexp)) .
+                                      esc_html_match_hl($pretty_path, $search_regexp)) .
                      "</td>\n" .
                      "<td>" . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"summary"),
                                        -class => "list",
                      "</td>\n" .
                      "<td>" . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"summary"),
                                        -class => "list",
@@ -7192,7 +7227,7 @@ sub git_tree {
                }
                git_print_page_nav('tree','', $hash_base, undef, undef,
                                   join(' | ', @views_nav));
                }
                git_print_page_nav('tree','', $hash_base, undef, undef,
                                   join(' | ', @views_nav));
-               git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base);
+               #git_print_header_div('commit', esc_html($co{'title'}) . $ref, $hash_base);
        } else {
                undef $hash_base;
                print "<div class=\"page_nav\">\n";
        } else {
                undef $hash_base;
                print "<div class=\"page_nav\">\n";
@@ -7251,6 +7286,30 @@ sub git_tree {
        }
        print "</table>\n" .
              "</div>";
        }
        print "</table>\n" .
              "</div>";
+
+       # If present, print one of the following, in order:
+       #       README.md, README.txt, README, README.html.
+       my $cwd_path = "$projectroot/$project";
+       $cwd_path =~ s/\.git$//;
+       $cwd_path = $cwd_path . $basedir;
+       if (!$prevent_xss && -s $cwd_path . "README.md") {
+               print "<div class=\"readme\">\n";
+               insert_markdown_file($cwd_path . "README.md");
+               print "\n</div>\n"; # class="readme"
+       } elsif (!$prevent_xss && -s $cwd_path . "README.txt") {
+               print "<div class=\"readme\">\n";
+               insert_text_file($cwd_path . "README.txt");
+               print "\n</div>\n"; # class="readme"
+       } elsif (!$prevent_xss && -s $cwd_path . "README") {
+               print "<div class=\"readme\">\n";
+               insert_text_file($cwd_path . "README");
+               print "\n</div>\n"; # class="readme"
+       } elsif (!$prevent_xss && -s $cwd_path . "README.html") {
+               print "<div class=\"readme\">\n";
+               insert_html_file($cwd_path . "README.html");
+               print "\n</div>\n"; # class="readme"
+       }
+
        git_footer_html();
 }
 
        git_footer_html();
 }