At Mon, 15 Aug 2005 11:53:20 -0700 (PDT), Linus Torvalds wrote: > > On Tue, 16 Aug 2005, Yasushi SHOJI wrote: > > > > It seems to me that git-diff-tree needs huge memory if you try to diff > > on big change with rename detection enabled. > > > > This isn't problem for sane project but if you create a repo with only > > major releases imports, git-diff-tree run by git_commit() eats system > > memory and die ;P > > Instead of disabling it entirely, how about just having some limit on it?
ah, that's a good idea. here is a quick and dirty patch. -- yashi diff --git a/gitweb.cgi b/gitweb.cgi --- a/gitweb.cgi +++ b/gitweb.cgi @@ -40,6 +40,9 @@ my $home_text = "indextext.html"; #my $projects_list = $projectroot; my $projects_list = "index/index.aux"; +# max number of changes to use rename detection on git-diff-tree +my $rename_detection_threshold = 1000; + # input validation and dispatch my $action = $cgi->param('a'); if (defined $action) { @@ -1587,7 +1590,18 @@ sub git_commit { $root = " --root"; $parent = ""; } - open my $fd, "-|", "$gitbin/git-diff-tree -r -M $root $parent $hash" or die_error(undef, "Open failed."); + my $nr_files; + my $opts = ""; + my $disabled_notice; + open my $fd, "-|", "$gitbin/git-diff-tree -r $root $parent $hash" or die_error(undef, "Open failed."); + $nr_files++ while <$fd>; + close $fd or die_error(undef, "Counting diff-tree failed."); + if ($nr_files < $rename_detection_threshold) { + $opts .= " -M"; + } else { + $disabled_notice = "(Rename detection disabled)"; + } + open my $fd, "-|", "$gitbin/git-diff-tree -r $opts $root $parent $hash" or die_error(undef, "Open failed."); @difftree = map { chomp; $_ } <$fd>; close $fd or die_error(undef, "Reading diff-tree failed."); git_header_html(); @@ -1671,7 +1685,7 @@ sub git_commit { print "</div>\n"; print "<div class=\"list_head\">\n"; if ($#difftree > 10) { - print(($#difftree + 1) . " files changed:\n"); + print(($#difftree + 1) . " files changed" . $disabled_notice . ":\n"); } print "</div>\n"; print "<table cellspacing=\"0\">\n"; - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html