diffcore-rename: cache file deltas
[gitweb.git] / git-gui / lib / database.tcl
index 43e4a289bba9c265d6652ce404d75967a57f7ca3..0657cc2245cec67bbb6d3399935a40247bd0c402 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright (C) 2006, 2007 Shawn Pearce
 
 proc do_stats {} {
-       set fd [open "| git count-objects -v" r]
+       set fd [git_read count-objects -v]
        while {[gets $fd line] > 0} {
                if {[regexp {^([^:]+): (\d+)$} $line _ name value]} {
                        set stats($name) $value
@@ -87,3 +87,30 @@ proc do_fsck_objects {} {
        lappend cmd --strict
        console::exec $w $cmd
 }
+
+proc hint_gc {} {
+       set object_limit 8
+       if {[is_Windows]} {
+               set object_limit 1
+       }
+
+       set objects_current [llength [glob \
+               -directory [gitdir objects 42] \
+               -nocomplain \
+               -tails \
+               -- \
+               *]]
+
+       if {$objects_current >= $object_limit} {
+               set objects_current [expr {$objects_current * 256}]
+               set object_limit    [expr {$object_limit    * 256}]
+               if {[ask_popup \
+                       "This repository currently has approximately $objects_current loose objects.
+
+To maintain optimal performance it is strongly recommended that you compress the database when more than $object_limit loose objects exist.
+
+Compress the database now?"] eq yes} {
+                       do_gc
+               }
+       }
+}