Spaces:
Runtime error
Runtime error
| # 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 | |
| } | |
| } | |
| } | |