git-gui: Delay the GC hint until after we are running
authorShawn O. Pearce <spearce@spearce.org>
Wed, 18 Jul 2007 03:20:56 +0000 (23:20 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Wed, 18 Jul 2007 03:20:56 +0000 (23:20 -0400)
I'm moving the code related to looking to see if we should GC now
into a procedure closer to where it belongs, the database module.
This reduces our script by a few lines for the single commit case
(aka citool).  But really it just is to help organize the code.

We now perform the check after we have been running for at least
1 second.  This way the main window has time to open up and our
dialog (if we open it) will attach to the main window, instead of
floating out in no-mans-land like it did before on Mac OS X.

I had to use a wait of a full second here as a wait of 1 millisecond
made our console install itself into the main window.  Apparently we
had a race condition with the console code where both the console and
the main window thought they were the main window.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
git-gui.sh
lib/database.tcl

index 2127557f9d595020765dbf318051375be8c7e390..044312979677e7655c0a25a53aa6d77ab5b7aeca 100755 (executable)
@@ -2581,36 +2581,11 @@ if {[is_enabled transport]} {
        populate_push_menu
 }
 
-# -- Only suggest a gc run if we are going to stay running.
-#
-if {[is_enabled multicommit]} {
-       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
-               }
-       }
-       unset object_limit objects_current
-}
-
 lock_index begin-read
 if {![winfo ismapped .]} {
        wm deiconify .
 }
 after 1 do_rescan
+if {[is_enabled multicommit]} {
+       after 1000 hint_gc
+}
index 87c815d7ac4f64d4d837f950f6f60e141a4433d5..0657cc2245cec67bbb6d3399935a40247bd0c402 100644 (file)
@@ -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
+               }
+       }
+}