From: Yasushi SHOJI Date: Mon, 15 Aug 2005 18:31:18 GMT Subject: gitweb - option to disable rename detection Message-ID: <87d5ofoxvt.wl@mail2.atmark-techno.com> Hi all, 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 so here is a proposal patch to add an option to disable rename detection on selected project. # please bear with me! I _know_ my perl code sucks. this is just to # show my idea. regards, -- yashi diff --git a/gitweb.cgi b/gitweb.cgi --- a/gitweb.cgi +++ b/gitweb.cgi @@ -40,6 +40,11 @@ my $home_text = "indextext.html"; #my $projects_list = $projectroot; my $projects_list = "index/index.aux"; +# rename detection on big change require a lot of memory. If your tree +# has big change commit, list those project names to disable rename +# detection. most sane project doesn't need to disable this feature. +my $projects_disable_rename_detection = ""; + # input validation and dispatch my $action = $cgi->param('a'); if (defined $action) { @@ -1572,6 +1577,17 @@ sub git_log { git_footer_html(); } +sub git_diff_tree_options { + my $found = 0; + my @list = split(/ /, $projects_disable_rename_detection); + foreach my $p (@list) { + if ($project eq $p) { + $found = 1; + } + } + $found ? "" : "-M"; +} + sub git_commit { my %co = git_read_commit($hash); if (!%co) { @@ -1587,7 +1603,8 @@ 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 $opts = git_diff_tree_options(); + 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();