From: Christopher Durkin Date: Thu, 15 Aug 2013 03:02:38 GMT Subject: [PATCH 1/2] gitweb: add filename search function Message-ID: 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 "\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 "\n"; + my $matches = 0; + my $alternate = 1; + my $file_href; + + while (my $filename = <$fd>) { + chomp $filename; + + if ($matches > $match_limit) { + print "
Too many matches, listing trimmed
\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 "\n"; + } else { + print "\n"; + } + $alternate ^= 1; + + print "\n"; + print "\n"; + } + + if ($matches == 0) { + print "
No matches found
\n"; + } + close $fd; + + print "
". + $cgi->a({-href => $file_href, -class => "list"}, esc_path($filename)); + print "
\n"; + + git_footer_html(); +} + ## ====================================================================== ## ====================================================================== ## actions -- 1.8.3.msysgit.0