gitweb: git_blobdiff_plain is git_blobdiff('plain')
git_blobdiff and git_blobdiff_plain are now collapsed into one subroutine git_blobdiff, with format (currently 'html' which is default format corresponding to git_blobdiff, and 'plain' corresponding to git_blobdiff_plain) specified in argument. blobdiff_plain format is now generated either by git-diff-tree or by git-diff. Added X-Git-Url: header. From-file and to-file name in header are corrected. Note that for now commitdiff_plain does not detect renames and copying, while blobdiff_plain does. While at it, set expires to "+1d" for non-textual hash ids. Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
7c5e2ebb5d
commit
9b71b1f6b3
@ -2815,9 +2815,12 @@ sub git_commit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub git_blobdiff {
|
sub git_blobdiff {
|
||||||
|
my $format = shift || 'html';
|
||||||
|
|
||||||
my $fd;
|
my $fd;
|
||||||
my @difftree;
|
my @difftree;
|
||||||
my %diffinfo;
|
my %diffinfo;
|
||||||
|
my $expires;
|
||||||
|
|
||||||
# preparing $fd and %diffinfo for git_patchset_body
|
# preparing $fd and %diffinfo for git_patchset_body
|
||||||
# new style URI
|
# new style URI
|
||||||
@ -2866,6 +2869,12 @@ sub git_blobdiff {
|
|||||||
$hash_parent ||= $diffinfo{'from_id'};
|
$hash_parent ||= $diffinfo{'from_id'};
|
||||||
$hash ||= $diffinfo{'to_id'};
|
$hash ||= $diffinfo{'to_id'};
|
||||||
|
|
||||||
|
# non-textual hash id's can be cached
|
||||||
|
if ($hash_base =~ m/^[0-9a-fA-F]{40}$/ &&
|
||||||
|
$hash_parent_base =~ m/^[0-9a-fA-F]{40}$/) {
|
||||||
|
$expires = '+1d';
|
||||||
|
}
|
||||||
|
|
||||||
# open patch output
|
# open patch output
|
||||||
open $fd, "-|", $GIT, "diff-tree", '-r', '-p', '-M', '-C', $hash_parent_base, $hash_base,
|
open $fd, "-|", $GIT, "diff-tree", '-r', '-p', '-M', '-C', $hash_parent_base, $hash_base,
|
||||||
"--", $file_name
|
"--", $file_name
|
||||||
@ -2895,6 +2904,13 @@ sub git_blobdiff {
|
|||||||
$diffinfo{'to_file'} = $hash;
|
$diffinfo{'to_file'} = $hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# non-textual hash id's can be cached
|
||||||
|
if ($hash =~ m/^[0-9a-fA-F]{40}$/ &&
|
||||||
|
$hash_parent =~ m/^[0-9a-fA-F]{40}$/) {
|
||||||
|
$expires = '+1d';
|
||||||
|
}
|
||||||
|
|
||||||
|
# open patch output
|
||||||
#open $fd, "-|", $GIT, "diff", '-p', $hash_parent, $hash
|
#open $fd, "-|", $GIT, "diff", '-p', $hash_parent, $hash
|
||||||
open $fd, "-|", $GIT, "diff", '-p', $hash, $hash_parent
|
open $fd, "-|", $GIT, "diff", '-p', $hash, $hash_parent
|
||||||
or die_error(undef, "Open git-diff failed");
|
or die_error(undef, "Open git-diff failed");
|
||||||
@ -2904,40 +2920,67 @@ sub git_blobdiff {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# header
|
# header
|
||||||
my $formats_nav =
|
if ($format eq 'html') {
|
||||||
$cgi->a({-href => href(action=>"blobdiff_plain",
|
my $formats_nav =
|
||||||
hash=>$hash, hash_parent=>$hash_parent,
|
$cgi->a({-href => href(action=>"blobdiff_plain",
|
||||||
hash_base=>$hash_base, hash_parent_base=>$hash_parent_base,
|
hash=>$hash, hash_parent=>$hash_parent,
|
||||||
file_name=>$file_name, file_parent=>$file_parent)},
|
hash_base=>$hash_base, hash_parent_base=>$hash_parent_base,
|
||||||
"plain");
|
file_name=>$file_name, file_parent=>$file_parent)},
|
||||||
git_header_html();
|
"plain");
|
||||||
if (defined $hash_base && (my %co = parse_commit($hash_base))) {
|
git_header_html(undef, $expires);
|
||||||
git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
|
if (defined $hash_base && (my %co = parse_commit($hash_base))) {
|
||||||
git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
|
git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
|
||||||
|
git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
|
||||||
|
} else {
|
||||||
|
print "<div class=\"page_nav\"><br/>$formats_nav<br/></div>\n";
|
||||||
|
print "<div class=\"title\">$hash vs $hash_parent</div>\n";
|
||||||
|
}
|
||||||
|
if (defined $file_name) {
|
||||||
|
git_print_page_path($file_name, "blob", $hash_base);
|
||||||
|
} else {
|
||||||
|
print "<div class=\"page_path\"></div>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
} elsif ($format eq 'plain') {
|
||||||
|
print $cgi->header(
|
||||||
|
-type => 'text/plain',
|
||||||
|
-charset => 'utf-8',
|
||||||
|
-expires => $expires,
|
||||||
|
-content_disposition => qq(inline; filename="${file_name}.patch"));
|
||||||
|
|
||||||
|
print "X-Git-Url: " . $cgi->self_url() . "\n\n";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
print "<div class=\"page_nav\"><br/>$formats_nav<br/></div>\n";
|
die_error(undef, "Unknown blobdiff format");
|
||||||
print "<div class=\"title\">$hash vs $hash_parent</div>\n";
|
|
||||||
}
|
|
||||||
if (defined $file_name) {
|
|
||||||
git_print_page_path($file_name, "blob", $hash_base);
|
|
||||||
} else {
|
|
||||||
print "<div class=\"page_path\"></div>\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# patch
|
# patch
|
||||||
print "<div class=\"page_body\">\n";
|
if ($format eq 'html') {
|
||||||
|
print "<div class=\"page_body\">\n";
|
||||||
|
|
||||||
git_patchset_body($fd, [ \%diffinfo ], $hash_base, $hash_parent_base);
|
git_patchset_body($fd, [ \%diffinfo ], $hash_base, $hash_parent_base);
|
||||||
close $fd;
|
close $fd;
|
||||||
|
|
||||||
print "</div>\n"; # class="page_body"
|
print "</div>\n"; # class="page_body"
|
||||||
git_footer_html();
|
git_footer_html();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
while (my $line = <$fd>) {
|
||||||
|
$line =~ s!a/($hash|$hash_parent)!a/$diffinfo{'from_file'}!g;
|
||||||
|
$line =~ s!b/($hash|$hash_parent)!b/$diffinfo{'to_file'}!g;
|
||||||
|
|
||||||
|
print $line;
|
||||||
|
|
||||||
|
last if $line =~ m!^\+\+\+!;
|
||||||
|
}
|
||||||
|
local $/ = undef;
|
||||||
|
print <$fd>;
|
||||||
|
close $fd;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub git_blobdiff_plain {
|
sub git_blobdiff_plain {
|
||||||
mkdir($git_temp, 0700);
|
git_blobdiff('plain');
|
||||||
print $cgi->header(-type => "text/plain", -charset => 'utf-8');
|
|
||||||
git_diff_print($hash_parent, $file_name || $hash_parent, $hash, $file_name || $hash, "plain");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub git_commitdiff {
|
sub git_commitdiff {
|
||||||
|
Loading…
Reference in New Issue
Block a user