[PATCH 1/3] git-gui: factor out too_many_loose_objects routine from hint_gc
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Feb 18, 2010, 14:35 UTC
- 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 <jrnieder@gmail.com> --- 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