git-gui: Suggest when running 'git gc' may be worthwhile.

Users often forget to repack their object database, then start to
complain about how slow it is to perform common operations after
they have collected thousands of loose objects in their objects
directory.  A simple repack usually restores performance.

During startup git-gui now asks git-count-objects how many loose
objects exist, and if this number exceeds a hardcoded threshold
we suggest that the user compress the database (aka run 'git gc')
at this time.  I've hardcoded this to 2000 objects on non-Windows
systems as there the filesystems tend to handle the ~8 objects
per directory just fine.  On Windows NTFS and FAT are just so slow
that we really start to lag when more than 200 loose objects exist,
so the hardcoded threshold is much lower there.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Shawn O. Pearce 2007-01-20 21:23:21 -05:00
Родитель f7b9f6e440
Коммит 8ff487c737
1 изменённых файлов: 40 добавлений и 0 удалений

Просмотреть файл

@ -195,6 +195,25 @@ proc info_popup {msg} {
-message $msg
}
proc ask_popup {msg} {
global gitdir appname
set title $appname
if {$gitdir ne {}} {
append title { (}
append title [lindex \
[file split [file normalize [file dirname $gitdir]]] \
end]
append title {)}
}
return [tk_messageBox \
-parent . \
-icon question \
-type yesno \
-title $title \
-message $msg]
}
######################################################################
##
## repository setup
@ -3790,5 +3809,26 @@ if {!$single_commit} {
populate_push_menu .mbar.push
}
# -- Only suggest a gc run if we are going to stay running.
#
if {!$single_commit} {
set object_limit 2000
if {[is_Windows]} {set object_limit 200}
regexp {^([0-9]+) objects,} [exec git count-objects] _junk objects_current
if {$objects_current >= $object_limit} {
if {[ask_popup \
"This repository currently has $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 _junk objects_current
}
lock_index begin-read
after 1 do_rescan