You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
3.0 KiB
115 lines
3.0 KiB
# git-gui object database management support |
|
# Copyright (C) 2006, 2007 Shawn Pearce |
|
|
|
proc do_stats {} { |
|
global use_ttk NS |
|
set fd [git_read count-objects -v] |
|
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 |
|
Dialog $w |
|
wm withdraw $w |
|
wm geometry $w "+[winfo rootx .]+[winfo rooty .]" |
|
|
|
${NS}::frame $w.buttons |
|
${NS}::button $w.buttons.close -text [mc Close] \ |
|
-default active \ |
|
-command [list destroy $w] |
|
${NS}::button $w.buttons.gc -text [mc "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 |
|
|
|
${NS}::labelframe $w.stat -text [mc "Database Statistics"] |
|
foreach s { |
|
{count {mc "Number of loose objects"}} |
|
{size {mc "Disk space used by loose objects"} { KiB}} |
|
{in-pack {mc "Number of packed objects"}} |
|
{packs {mc "Number of packs"}} |
|
{size-pack {mc "Disk space used by packed objects"} { KiB}} |
|
{prune-packable {mc "Packed objects waiting for pruning"}} |
|
{garbage {mc "Garbage files"}} |
|
} { |
|
set name [lindex $s 0] |
|
set label [eval [lindex $s 1]] |
|
if {[catch {set value $stats($name)}]} continue |
|
if {[llength $s] > 2} { |
|
set value "$value[lindex $s 2]" |
|
} |
|
|
|
${NS}::label $w.stat.l_$name -text [mc "%s:" $label] -anchor w |
|
${NS}::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 [mc "%s (%s): Database Statistics" [appname] [reponame]] |
|
wm deiconify $w |
|
tkwait window $w |
|
} |
|
|
|
proc do_gc {} { |
|
set w [console::new {gc} [mc "Compressing the object database"]] |
|
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 {} { |
|
set w [console::new {fsck-objects} \ |
|
[mc "Verifying the object database with fsck-objects"]] |
|
set cmd [list git fsck-objects] |
|
lappend cmd --full |
|
lappend cmd --cache |
|
lappend cmd --strict |
|
console::exec $w $cmd |
|
} |
|
|
|
proc hint_gc {} { |
|
set ndirs 1 |
|
set limit 8 |
|
if {[is_Windows]} { |
|
set ndirs 4 |
|
set limit 1 |
|
} |
|
|
|
set count [llength [glob \ |
|
-nocomplain \ |
|
-- \ |
|
[gitdir objects 4\[0-[expr {$ndirs-1}]\]/*]]] |
|
|
|
if {$count >= $limit * $ndirs} { |
|
set objects_current [expr {$count * 256/$ndirs}] |
|
if {[ask_popup \ |
|
[mc "This repository currently has approximately %i loose objects. |
|
|
|
To maintain optimal performance it is strongly recommended that you compress the database. |
|
|
|
Compress the database now?" $objects_current]] eq yes} { |
|
do_gc |
|
} |
|
} |
|
}
|
|
|