Add another item to the search drop-down (author/committer/etc) to search for file names instead of file content. Output is similar to the grep contents output, with each entry linking to the file. --- gitweb/gitweb.perl | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index f429f75..4a7b0a5 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -6360,6 +6360,65 @@ sub git_search_grep_body { print "</table>\n"; } +sub git_search_filenames { + my %co = @_; + local $/ = "\n"; + my $match_limit = 1000; + + open my $fd, "-|", git_cmd(), 'ls-tree', '--name-only', '--full-name', '-r', + $co{'tree'} or die_error(500, "Open git-ls-tree failed"); + + git_header_html(); + + git_print_page_nav('','', $hash,$co{'tree'},$hash); + git_print_header_div('commit', esc_html($co{'title'}), $hash); + + print "<table class=\"filename_search\">\n"; + my $matches = 0; + my $alternate = 1; + my $file_href; + + while (my $filename = <$fd>) { + chomp $filename; + + if ($matches > $match_limit) { + print "<div class=\"diff nodifferences\">Too many matches, listing trimmed</div>\n"; + last; + } + + if ($search_use_regexp) { + next unless ($filename =~ /$searchtext/); + } else { + next unless index($filename,$searchtext) >= 0; + } + + $matches++; + $file_href = href(action=>"blob", hash_base=>$co{'id'}, + file_name=>$filename); + + if ($alternate) { + print "<tr class=\"dark\">\n"; + } else { + print "<tr class=\"light\">\n"; + } + $alternate ^= 1; + + print "<td class=\"list\">". + $cgi->a({-href => $file_href, -class => "list"}, esc_path($filename)); + print "</td>\n"; + print "</tr>\n"; + } + + if ($matches == 0) { + print "<div class=\"diff nodifferences\">No matches found</div>\n"; + } + close $fd; + + print "</table>\n"; + + git_footer_html(); +} + ## ====================================================================== ## ====================================================================== ## actions -- 1.8.3.msysgit.0 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html