1 # git-gui object database management support
2 # Copyright (C) 2006, 2007 Shawn Pearce
5 set fd [git_read count-objects -v]
6 while {[gets $fd line] > 0} {
7 if {[regexp {^([^:]+): (\d+)$} $line _ name value]} {
8 set stats($name) $value
14 foreach p [glob -directory [gitdir objects pack] \
17 incr packed_sz [file size $p]
20 set stats(size-pack) [expr {$packed_sz / 1024}]
25 wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
27 label $w.header -text [mc "Database Statistics"]
28 pack $w.header -side top -fill x
30 frame $w.buttons -border 1
31 button $w.buttons.close -text [mc Close] \
33 -command [list destroy $w]
34 button $w.buttons.gc -text [mc "Compress Database"] \
36 -command "destroy $w;do_gc"
37 pack $w.buttons.close -side right
38 pack $w.buttons.gc -side left
39 pack $w.buttons -side bottom -fill x -pady 10 -padx 10
41 frame $w.stat -borderwidth 1 -relief solid
43 {count {mc "Number of loose objects"}}
44 {size {mc "Disk space used by loose objects"} { KiB}}
45 {in-pack {mc "Number of packed objects"}}
46 {packs {mc "Number of packs"}}
47 {size-pack {mc "Disk space used by packed objects"} { KiB}}
48 {prune-packable {mc "Packed objects waiting for pruning"}}
49 {garbage {mc "Garbage files"}}
51 set name [lindex $s 0]
52 set label [eval [lindex $s 1]]
53 if {[catch {set value $stats($name)}]} continue
54 if {[llength $s] > 2} {
55 set value "$value[lindex $s 2]"
58 label $w.stat.l_$name -text "$label:" -anchor w
59 label $w.stat.v_$name -text $value -anchor w
60 grid $w.stat.l_$name $w.stat.v_$name -sticky we -padx {0 5}
62 pack $w.stat -pady 10 -padx 10
64 bind $w <Visibility> "grab $w; focus $w.buttons.close"
65 bind $w <Key-Escape> [list destroy $w]
66 bind $w <Key-Return> [list destroy $w]
67 wm title $w [append "[appname] ([reponame]): " [mc "Database Statistics"]]
72 set w [console::new {gc} [mc "Compressing the object database"]]
74 {exec git pack-refs --prune}
75 {exec git reflog expire --all}
76 {exec git repack -a -d -l}
81 proc do_fsck_objects {} {
82 set w [console::new {fsck-objects} \
83 [mc "Verifying the object database with fsck-objects"]]
84 set cmd [list git fsck-objects]
97 set objects_current [llength [glob \
98 -directory [gitdir objects 42] \
104 if {$objects_current >= $object_limit} {
105 set objects_current [expr {$objects_current * 250}]
106 set object_limit [expr {$object_limit * 250}]
108 [mc "This repository currently has approximately %i loose objects.
110 To maintain optimal performance it is strongly recommended that you compress the database when more than %i loose objects exist.
112 Compress the database now?" $objects_current $object_limit]] eq yes} {