From: Junio C Hamano Date: Tue, 03 Sep 2013 20:07:48 GMT Subject: Re: [PATCH 1/2] gitweb: add filename search function Message-ID: In-Reply-To: Christopher Durkin writes: > 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. > --- Missing sign-off. > 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"; I think this file is indented with HT, not a single SP. > } > > +sub git_search_filenames { > + my %co = @_; ... nor four SP. One level of indent is a single HT. > + local $/ = "\n"; > + my $match_limit = 1000; > + > + open my $fd, "-|", git_cmd(), 'ls-tree', '--name-only', > '--full-name', '-r', Line-wrapped broken patch that cannot be applied (I see there are a few more similar ones below). > + $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