diff options
author | Jakub Narebski <jnareb@gmail.com> | 2006-08-24 19:34:36 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-08-25 19:38:30 -0700 |
commit | 157e43b4b0dd5a08eb7a6838192ac58bca62fa5b (patch) | |
tree | be8e2aedf04d03bef78025101be5b27c0f8bea7f | |
parent | gitweb: Remove invalid comment in format_diff_line (diff) | |
download | tgif-157e43b4b0dd5a08eb7a6838192ac58bca62fa5b.tar.xz |
gitweb: Streamify patch output in git_commitdiff
Change output of patch(set) in git_commitdiff from slurping whole diff
in @patchset array before processing, to passing file descriptor to
git_patchset_body.
Advantages: faster, incremental output, smaller memory footprint.
Disadvantages: cannot react when there is error during closing file
descriptor.
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-x | gitweb/gitweb.perl | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 1d3d9df752..08e0472c61 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -1539,7 +1539,7 @@ sub git_difftree_body { } sub git_patchset_body { - my ($patchset, $difftree, $hash, $hash_parent) = @_; + my ($fd, $difftree, $hash, $hash_parent) = @_; my $patch_idx = 0; my $in_header = 0; @@ -1548,7 +1548,9 @@ sub git_patchset_body { print "<div class=\"patchset\">\n"; - LINE: foreach my $patch_line (@$patchset) { + LINE: + while (my $patch_line @$fd>) { + chomp $patch_line; if ($patch_line =~ m/^diff /) { # "git diff" header # beginning of patch (in patchset) @@ -2727,7 +2729,6 @@ sub git_commitdiff { # read commitdiff my $fd; my @difftree; - my @patchset; if ($format eq 'html') { open $fd, "-|", $GIT, "diff-tree", '-r', '-M', '-C', "--patch-with-raw", "--full-index", $hash_parent, $hash @@ -2738,13 +2739,11 @@ sub git_commitdiff { last unless $line; push @difftree, $line; } - @patchset = map { chomp; $_ } <$fd>; - close $fd - or die_error(undef, "Reading git-diff-tree failed"); } elsif ($format eq 'plain') { open $fd, "-|", $GIT, "diff-tree", '-r', '-p', '-B', $hash_parent, $hash or die_error(undef, "Open git-diff-tree failed"); + } else { die_error(undef, "Unknown commitdiff format"); } @@ -2806,8 +2805,8 @@ TEXT #git_difftree_body(\@difftree, $hash, $hash_parent); #print "<br/>\n"; - git_patchset_body(\@patchset, \@difftree, $hash, $hash_parent); - + git_patchset_body($fd, \@difftree, $hash, $hash_parent); + close $fd; print "</div>\n"; # class="page_body" git_footer_html(); |