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@xxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html