From: Jonathan Nieder Date: Thu, 18 Feb 2010 14:35:58 GMT Subject: [PATCH 1/3] git-gui: factor out too_many_loose_objects routine from hint_gc Message-ID: <20100218143558.GA30520@progeny.tock> In-Reply-To: <20100218143431.GA30486@progeny.tock> Move the heuristic for deciding whether to try a gc into its own function, to make it easier to change. No change in behavior intended. Signed-off-by: Jonathan Nieder --- lib/database.tcl | 21 +++++++++++++++++++-- 1 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/database.tcl b/lib/database.tcl index 1f187ed..25a0509 100644 --- a/lib/database.tcl +++ b/lib/database.tcl @@ -88,7 +88,16 @@ proc do_fsck_objects {} { console::exec $w $cmd } -proc hint_gc {} { +proc too_many_loose_objects {} { + # Quickly check if a "gc" is needed, by estimating how + # many loose objects there are. Because SHA-1 is evenly + # distributed, we can check only one and get a reasonable + # estimate. + # + # Roughly based on the function of the same name in builtin-gc.c + # + # 'git gc' should learn a new --porcelain option + # so it can take care of this. set ndirs 1 set limit 8 if {[is_Windows]} { @@ -102,7 +111,15 @@ proc hint_gc {} { [gitdir objects 4\[0-[expr {$ndirs-1}]\]/*]]] if {$count >= $limit * $ndirs} { - set objects_current [expr {$count * 256/$ndirs}] + return [expr {$count * 256/$ndirs}] + } else { + return 0 + } +} + +proc hint_gc {} { + set objects_current [too_many_loose_objects] + if {$objects_current != 0} { if {[ask_popup \ [mc "This repository currently has approximately %i loose objects. -- 1.7.0