|
|
@ -5305,51 +5305,19 @@ sub git_search { |
|
|
|
print "<table class=\"pickaxe search\">\n"; |
|
|
|
print "<table class=\"pickaxe search\">\n"; |
|
|
|
my $alternate = 1; |
|
|
|
my $alternate = 1; |
|
|
|
$/ = "\n"; |
|
|
|
$/ = "\n"; |
|
|
|
my $git_command = git_cmd_str(); |
|
|
|
open my $fd, '-|', git_cmd(), '--no-pager', 'log', @diff_opts, |
|
|
|
my $searchqtext = $searchtext; |
|
|
|
'--pretty=format:%H', '--no-abbrev', '--raw', "-S$searchtext", |
|
|
|
$searchqtext =~ s/'/'\\''/; |
|
|
|
($search_use_regexp ? '--pickaxe-regex' : ()); |
|
|
|
my $pickaxe_flags = $search_use_regexp ? '--pickaxe-regex' : ''; |
|
|
|
|
|
|
|
open my $fd, "-|", "$git_command rev-list $hash | " . |
|
|
|
|
|
|
|
"$git_command diff-tree -r --stdin -S\'$searchqtext\' $pickaxe_flags"; |
|
|
|
|
|
|
|
undef %co; |
|
|
|
undef %co; |
|
|
|
my @files; |
|
|
|
my @files; |
|
|
|
while (my $line = <$fd>) { |
|
|
|
while (my $line = <$fd>) { |
|
|
|
if (%co && $line =~ m/^:([0-7]{6}) ([0-7]{6}) ([0-9a-fA-F]{40}) ([0-9a-fA-F]{40}) (.)\t(.*)$/) { |
|
|
|
chomp $line; |
|
|
|
my %set; |
|
|
|
next unless $line; |
|
|
|
$set{'file'} = $6; |
|
|
|
|
|
|
|
$set{'from_id'} = $3; |
|
|
|
my %set = parse_difftree_raw_line($line); |
|
|
|
$set{'to_id'} = $4; |
|
|
|
if (defined $set{'commit'}) { |
|
|
|
$set{'id'} = $set{'to_id'}; |
|
|
|
# finish previous commit |
|
|
|
if ($set{'id'} =~ m/0{40}/) { |
|
|
|
|
|
|
|
$set{'id'} = $set{'from_id'}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if ($set{'id'} =~ m/0{40}/) { |
|
|
|
|
|
|
|
next; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
push @files, \%set; |
|
|
|
|
|
|
|
} elsif ($line =~ m/^([0-9a-fA-F]{40})$/){ |
|
|
|
|
|
|
|
if (%co) { |
|
|
|
if (%co) { |
|
|
|
if ($alternate) { |
|
|
|
|
|
|
|
print "<tr class=\"dark\">\n"; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
print "<tr class=\"light\">\n"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
$alternate ^= 1; |
|
|
|
|
|
|
|
my $author = chop_and_escape_str($co{'author_name'}, 15, 5); |
|
|
|
|
|
|
|
print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" . |
|
|
|
|
|
|
|
"<td><i>" . $author . "</i></td>\n" . |
|
|
|
|
|
|
|
"<td>" . |
|
|
|
|
|
|
|
$cgi->a({-href => href(action=>"commit", hash=>$co{'id'}), |
|
|
|
|
|
|
|
-class => "list subject"}, |
|
|
|
|
|
|
|
chop_and_escape_str($co{'title'}, 50) . "<br/>"); |
|
|
|
|
|
|
|
while (my $setref = shift @files) { |
|
|
|
|
|
|
|
my %set = %$setref; |
|
|
|
|
|
|
|
print $cgi->a({-href => href(action=>"blob", hash_base=>$co{'id'}, |
|
|
|
|
|
|
|
hash=>$set{'id'}, file_name=>$set{'file'}), |
|
|
|
|
|
|
|
-class => "list"}, |
|
|
|
|
|
|
|
"<span class=\"match\">" . esc_path($set{'file'}) . "</span>") . |
|
|
|
|
|
|
|
"<br/>\n"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
print "</td>\n" . |
|
|
|
print "</td>\n" . |
|
|
|
"<td class=\"link\">" . |
|
|
|
"<td class=\"link\">" . |
|
|
|
$cgi->a({-href => href(action=>"commit", hash=>$co{'id'})}, "commit") . |
|
|
|
$cgi->a({-href => href(action=>"commit", hash=>$co{'id'})}, "commit") . |
|
|
@ -5358,11 +5326,44 @@ sub git_search { |
|
|
|
print "</td>\n" . |
|
|
|
print "</td>\n" . |
|
|
|
"</tr>\n"; |
|
|
|
"</tr>\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
%co = parse_commit($1); |
|
|
|
|
|
|
|
|
|
|
|
if ($alternate) { |
|
|
|
|
|
|
|
print "<tr class=\"dark\">\n"; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
print "<tr class=\"light\">\n"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
$alternate ^= 1; |
|
|
|
|
|
|
|
%co = parse_commit($set{'commit'}); |
|
|
|
|
|
|
|
my $author = chop_and_escape_str($co{'author_name'}, 15, 5); |
|
|
|
|
|
|
|
print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" . |
|
|
|
|
|
|
|
"<td><i>$author</i></td>\n" . |
|
|
|
|
|
|
|
"<td>" . |
|
|
|
|
|
|
|
$cgi->a({-href => href(action=>"commit", hash=>$co{'id'}), |
|
|
|
|
|
|
|
-class => "list subject"}, |
|
|
|
|
|
|
|
chop_and_escape_str($co{'title'}, 50) . "<br/>"); |
|
|
|
|
|
|
|
} elsif (defined $set{'to_id'}) { |
|
|
|
|
|
|
|
next if ($set{'to_id'} =~ m/^0{40}$/); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print $cgi->a({-href => href(action=>"blob", hash_base=>$co{'id'}, |
|
|
|
|
|
|
|
hash=>$set{'to_id'}, file_name=>$set{'to_file'}), |
|
|
|
|
|
|
|
-class => "list"}, |
|
|
|
|
|
|
|
"<span class=\"match\">" . esc_path($set{'file'}) . "</span>") . |
|
|
|
|
|
|
|
"<br/>\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
close $fd; |
|
|
|
close $fd; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# finish last commit (warning: repetition!) |
|
|
|
|
|
|
|
if (%co) { |
|
|
|
|
|
|
|
print "</td>\n" . |
|
|
|
|
|
|
|
"<td class=\"link\">" . |
|
|
|
|
|
|
|
$cgi->a({-href => href(action=>"commit", hash=>$co{'id'})}, "commit") . |
|
|
|
|
|
|
|
" | " . |
|
|
|
|
|
|
|
$cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$co{'id'})}, "tree"); |
|
|
|
|
|
|
|
print "</td>\n" . |
|
|
|
|
|
|
|
"</tr>\n"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
print "</table>\n"; |
|
|
|
print "</table>\n"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|