From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yasushi SHOJI Subject: Re: gitweb - option to disable rename detection Date: Tue, 16 Aug 2005 05:48:15 +0900 Message-ID: <87br3zorjk.wl@mail2.atmark-techno.com> References: <87d5ofoxvt.wl@mail2.atmark-techno.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Cc: git@vger.kernel.org X-From: git-owner@vger.kernel.org Mon Aug 15 22:49:53 2005 Return-path: Received: from vger.kernel.org ([209.132.176.167]) by ciao.gmane.org with esmtp (Exim 4.43) id 1E4lsb-0005OB-8X for gcvg-git@gmane.org; Mon, 15 Aug 2005 22:48:21 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964953AbVHOUsT (ORCPT ); Mon, 15 Aug 2005 16:48:19 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S964954AbVHOUsT (ORCPT ); Mon, 15 Aug 2005 16:48:19 -0400 Received: from shop.atmark-techno.com ([210.191.215.173]:9910 "EHLO mail2.atmark-techno.com") by vger.kernel.org with ESMTP id S964953AbVHOUsS (ORCPT ); Mon, 15 Aug 2005 16:48:18 -0400 Received: from smtp.local-network (dns1.atmark-techno.com [210.191.215.170]) by mail2.atmark-techno.com (Postfix) with ESMTP id 4CCE7767; Tue, 16 Aug 2005 05:48:16 +0900 (JST) Received: from wat.atmark-techno.com (unknown [192.168.10.81]) by smtp.local-network (Postfix) with ESMTP id 8B1FCB61F; Tue, 16 Aug 2005 05:51:01 +0900 (JST) To: Linus Torvalds In-Reply-To: User-Agent: Wanderlust/2.14.0 Sender: git-owner@vger.kernel.org Precedence: bulk X-Mailing-List: git@vger.kernel.org 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 "\n"; print "
\n"; if ($#difftree > 10) { - print(($#difftree + 1) . " files changed:\n"); + print(($#difftree + 1) . " files changed" . $disabled_notice . ":\n"); } print "
\n"; print "\n";