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
} {