mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
![Junio C Hamano](/assets/img/avatar_default.png)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABCAAGBQJYCJqmAAoJEDn3Aot9nM55uKQP/11BTzhOr9K3SLzwCr01ylGP 94AOA511vx3fIX5aWQ29S96tGbluo73RdbVsWFKKJcKSErpFPscFEiRkyjeMXE2T yWWOPOg08tm28ppZNp0Kqjb8VykUUKuG6gVT59DNFUZUqHYQbiQy+t8nwT+Qow3U dvo6lksovfSaW2FORWIi5KF5gD4v2F9qsbFgr725a8UoBrOmF0SWaCG4/ZYj0WxF 0rq8LjpvmMuQqd06DAoGMIsHa71R61En2QWfJ4YoE5+QRq8wQl37FmX+ojiA1rzY CG/vJO2Tw4v54wHKK1TCXG7LR4JhTcQZOa6zd8HHsPRn+viGDCMVUG9uMewfxH+m F47EVMxiKf0subm3fUhycqkvso0r6mOAddhz47RKT7tqU4XOnhPyGw0x6m7evawg Sz2+fOK3wwX2Qec5o3vBZKaEcOftSrLuZmbi5/j43crvcf+OAs9s/jdq/Ulpkks2 JI2i0DLzHABTbDn6QsuysEZnituks8T8Fdm5NOldritgBNVY81ifatekFscxt6Ct OrT9eGJk6iZiX1RvS+R7wykKJCBkxiyHqM8vSj5tPWjApgtnopPMudzNX41geaL9 ADeb8LVMTTNL/md8KED0deypilcPNnPbW035rAbyCpAsKbtgO3zdfzdzxsQ+dIvc MQpCDP5QPPr3toRVdNmb =VyhL -----END PGP SIGNATURE----- Merge tag 'gitgui-0.21.0' of git://repo.or.cz/git-gui 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 KiB
Tcl
116 lines
3 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
|
|
}
|
|
}
|
|
}
|