1 # git-gui object database management support
2 # Copyright (C) 2006, 2007 Shawn Pearce
6 set fd
[git_read count-objects
-v]
7 while {[gets $fd line
] > 0} {
8 if {[regexp {^
([^
:]+): (\d
+)$} $line _ name value
]} {
9 set stats
($name) $value
15 foreach p
[glob -directory [gitdir objects
pack] \
18 incr packed_sz
[file size
$p]
21 set stats
(size-pack
) [expr {$packed_sz / 1024}]
27 wm geometry
$w "+[winfo rootx .]+[winfo rooty .]"
29 ${NS
}::frame $w.buttons
30 ${NS
}::button $w.buttons.
close -text [mc Close
] \
32 -command [list destroy $w]
33 ${NS
}::button $w.buttons.gc
-text [mc
"Compress Database"] \
35 -command "destroy $w;do_gc"
36 pack $w.buttons.
close -side right
37 pack $w.buttons.gc
-side left
38 pack $w.buttons
-side bottom
-fill x
-pady 10 -padx 10
40 ${NS
}::labelframe $w.stat
-text [mc
"Database Statistics"]
42 {count
{mc
"Number of loose objects"}}
43 {size
{mc
"Disk space used by loose objects"} { KiB
}}
44 {in-pack
{mc
"Number of packed objects"}}
45 {packs
{mc
"Number of packs"}}
46 {size-pack
{mc
"Disk space used by packed objects"} { KiB
}}
47 {prune-packable
{mc
"Packed objects waiting for pruning"}}
48 {garbage
{mc
"Garbage files"}}
50 set name
[lindex $s 0]
51 set label [eval [lindex $s 1]]
52 if {[catch {set value
$stats($name)}]} continue
53 if {[llength $s] > 2} {
54 set value
"$value[lindex $s 2]"
57 ${NS
}::label $w.stat.l_
$name -text [mc
"%s:" $label] -anchor w
58 ${NS
}::label $w.stat.v_
$name -text $value -anchor w
59 grid $w.stat.l_
$name $w.stat.v_
$name -sticky we
-padx {0 5}
61 pack $w.stat
-pady 10 -padx 10
63 bind $w <Visibility
> "grab $w; focus $w.buttons.close"
64 bind $w <Key-Escape
> [list destroy $w]
65 bind $w <Key-Return
> [list destroy $w]
66 wm title
$w [mc
"%s (%s): Database Statistics" [appname
] [reponame
]]
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
]
99 set count
[llength [glob \
102 [gitdir objects
4\[0-[expr {$ndirs-1}]\]/*]]]
104 if {$count >= $limit * $ndirs} {
105 set objects_current
[expr {$count * 256/$ndirs}]
107 [mc
"This repository currently has approximately %i loose objects.
109 To maintain optimal performance it is strongly recommended that you compress the database.
111 Compress the database now?" $objects_current]] eq yes
} {