Merge branch 'master' of git://repo.or.cz/git-gui
[gitweb.git] / git-gui / lib / database.tcl
index 73058a826911dd5f75bb33636000b905096e975d..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
@@ -70,12 +70,12 @@ proc do_stats {} {
 
 proc do_gc {} {
        set w [console::new {gc} {Compressing the object database}]
-       console::chain {
-               {exec {git pack-refs --prune}}
-               {exec {git reflog expire --all}}
-               {exec {git repack -a -d -l}}
-               {exec {git rerere gc}}
-       } $w
+       console::chain $w {
+               {exec git pack-refs --prune}
+               {exec git reflog expire --all}
+               {exec git repack -a -d -l}
+               {exec git rerere gc}
+       }
 }
 
 proc do_fsck_objects {} {
@@ -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
+               }
+       }
+}