
git-gui 0.21.0 * tag 'gitgui-0.21.0' of git://repo.or.cz/git-gui: (22 commits) git-gui: set version 0.21 git-gui: Mark 'All' in remote.tcl for translation git-gui i18n: Updated Bulgarian translation (565,0f,0u) git-gui: avoid persisting modified author identity git-gui: handle the encoding of Git's output correctly git-gui: unicode file name support on windows git-gui: Update Russian translation git-gui: maintain backwards compatibility for merge syntax git-gui i18n: mark string in lib/error.tcl for translation git-gui: fix incorrect use of Tcl append command git-gui i18n: mark "usage:" strings for translation git-gui i18n: internationalize use of colon punctuation git-gui: ensure the file in the diff pane is in the list of selected files git-gui: support for $FILENAMES in tool definitions git-gui: fix initial git gui message encoding git-gui/po/glossary/txt-to-pot.sh: use the $( ... ) construct for command substitution git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut` git-gui: fix detection of Cygwin Amend tab ordering and text widget border and highlighting. Allow keyboard control to work in the staging widgets. ...
116 lines
3.0 KiB
Tcl
116 lines
3.0 KiB
Tcl
# 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
|
|
}
|
|
}
|
|
}
|