Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
commit
1b593e1ea4
3629 changed files with 1139935 additions and 0 deletions
115
git-gui/lib/database.tcl
Normal file
115
git-gui/lib/database.tcl
Normal file
|
@ -0,0 +1,115 @@
|
|||
# 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
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue