2007-05-08 05:35:48 +02:00
|
|
|
# git-gui object database management support
|
|
|
|
# Copyright (C) 2006, 2007 Shawn Pearce
|
|
|
|
|
|
|
|
proc do_stats {} {
|
2007-07-09 07:17:09 +02:00
|
|
|
set fd [git_read count-objects -v]
|
2007-05-08 05:35:48 +02:00
|
|
|
while {[gets $fd line] > 0} {
|
|
|
|
if {[regexp {^([^:]+): (\d+)$} $line _ name value]} {
|
|
|
|
set stats($name) $value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
close $fd
|
|
|
|
|
|
|
|
set packed_sz 0
|
|
|
|
foreach p [glob -directory [gitdir objects pack] \
|
|
|
|
-type f \
|
|
|
|
-nocomplain -- *] {
|
|
|
|
incr packed_sz [file size $p]
|
|
|
|
}
|
|
|
|
if {$packed_sz > 0} {
|
|
|
|
set stats(size-pack) [expr {$packed_sz / 1024}]
|
|
|
|
}
|
|
|
|
|
|
|
|
set w .stats_view
|
|
|
|
toplevel $w
|
|
|
|
wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
|
|
|
|
|
|
|
|
label $w.header -text {Database Statistics}
|
|
|
|
pack $w.header -side top -fill x
|
|
|
|
|
|
|
|
frame $w.buttons -border 1
|
|
|
|
button $w.buttons.close -text Close \
|
|
|
|
-default active \
|
|
|
|
-command [list destroy $w]
|
|
|
|
button $w.buttons.gc -text {Compress Database} \
|
|
|
|
-default normal \
|
|
|
|
-command "destroy $w;do_gc"
|
|
|
|
pack $w.buttons.close -side right
|
|
|
|
pack $w.buttons.gc -side left
|
|
|
|
pack $w.buttons -side bottom -fill x -pady 10 -padx 10
|
|
|
|
|
|
|
|
frame $w.stat -borderwidth 1 -relief solid
|
|
|
|
foreach s {
|
|
|
|
{count {Number of loose objects}}
|
|
|
|
{size {Disk space used by loose objects} { KiB}}
|
|
|
|
{in-pack {Number of packed objects}}
|
|
|
|
{packs {Number of packs}}
|
|
|
|
{size-pack {Disk space used by packed objects} { KiB}}
|
|
|
|
{prune-packable {Packed objects waiting for pruning}}
|
|
|
|
{garbage {Garbage files}}
|
|
|
|
} {
|
|
|
|
set name [lindex $s 0]
|
|
|
|
set label [lindex $s 1]
|
|
|
|
if {[catch {set value $stats($name)}]} continue
|
|
|
|
if {[llength $s] > 2} {
|
|
|
|
set value "$value[lindex $s 2]"
|
|
|
|
}
|
|
|
|
|
|
|
|
label $w.stat.l_$name -text "$label:" -anchor w
|
|
|
|
label $w.stat.v_$name -text $value -anchor w
|
|
|
|
grid $w.stat.l_$name $w.stat.v_$name -sticky we -padx {0 5}
|
|
|
|
}
|
|
|
|
pack $w.stat -pady 10 -padx 10
|
|
|
|
|
|
|
|
bind $w <Visibility> "grab $w; focus $w.buttons.close"
|
|
|
|
bind $w <Key-Escape> [list destroy $w]
|
|
|
|
bind $w <Key-Return> [list destroy $w]
|
|
|
|
wm title $w "[appname] ([reponame]): Database Statistics"
|
|
|
|
tkwait window $w
|
|
|
|
}
|
|
|
|
|
|
|
|
proc do_gc {} {
|
2007-05-01 08:59:53 +02:00
|
|
|
set w [console::new {gc} {Compressing the object database}]
|
2007-05-09 02:33:47 +02:00
|
|
|
console::chain $w {
|
|
|
|
{exec git pack-refs --prune}
|
|
|
|
{exec git reflog expire --all}
|
|
|
|
{exec git repack -a -d -l}
|
|
|
|
{exec git rerere gc}
|
|
|
|
}
|
2007-05-08 05:35:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
proc do_fsck_objects {} {
|
2007-05-01 08:59:53 +02:00
|
|
|
set w [console::new {fsck-objects} \
|
2007-05-08 05:35:48 +02:00
|
|
|
{Verifying the object database with fsck-objects}]
|
|
|
|
set cmd [list git fsck-objects]
|
|
|
|
lappend cmd --full
|
|
|
|
lappend cmd --cache
|
|
|
|
lappend cmd --strict
|
2007-05-01 08:59:53 +02:00
|
|
|
console::exec $w $cmd
|
2007-05-08 05:35:48 +02:00
|
|
|
}
|
2007-07-18 05:20:56 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|