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