Merge branch 'master' of git://repo.or.cz/git-gui
* 'master' of git://repo.or.cz/git-gui: git-gui: Use vi-like keys in merge dialog git-gui: Include commit id/subject in merge choices git-gui: Show all possible branches for merge git-gui: Move merge support into a namespace git-gui: Allow vi keys to scroll the diff/blame regions git-gui: Move console procs into their own namespace git-gui: Refactor into multiple files to save my sanity git-gui: Track our own embedded values and rebuild when they change git-gui: Refactor to use our git proc more often git-gui: Use option database defaults to set the font git-gui: Cleanup common font handling for font_ui git-gui: Correct line wrapping for too many branch message git-gui: Warn users before making an octopus merge git-gui: Include the subject in the status bar after commit Also perform an evil merge change to update Git's main Makefile to pass the proper options down into git-gui now that it depends on reasonable values for 'sharedir' and 'TCL_PATH'. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
89
git-gui/lib/database.tcl
Normal file
89
git-gui/lib/database.tcl
Normal file
@ -0,0 +1,89 @@
|
||||
# git-gui object database management support
|
||||
# Copyright (C) 2006, 2007 Shawn Pearce
|
||||
|
||||
proc do_stats {} {
|
||||
set fd [open "| git count-objects -v" r]
|
||||
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
|
||||
toplevel $w
|
||||
wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
|
||||
|
||||
label $w.header -text {Database Statistics}
|
||||
pack $w.header -side top -fill x
|
||||
|
||||
frame $w.buttons -border 1
|
||||
button $w.buttons.close -text Close \
|
||||
-default active \
|
||||
-command [list destroy $w]
|
||||
button $w.buttons.gc -text {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
|
||||
|
||||
frame $w.stat -borderwidth 1 -relief solid
|
||||
foreach s {
|
||||
{count {Number of loose objects}}
|
||||
{size {Disk space used by loose objects} { KiB}}
|
||||
{in-pack {Number of packed objects}}
|
||||
{packs {Number of packs}}
|
||||
{size-pack {Disk space used by packed objects} { KiB}}
|
||||
{prune-packable {Packed objects waiting for pruning}}
|
||||
{garbage {Garbage files}}
|
||||
} {
|
||||
set name [lindex $s 0]
|
||||
set label [lindex $s 1]
|
||||
if {[catch {set value $stats($name)}]} continue
|
||||
if {[llength $s] > 2} {
|
||||
set value "$value[lindex $s 2]"
|
||||
}
|
||||
|
||||
label $w.stat.l_$name -text "$label:" -anchor w
|
||||
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 "[appname] ([reponame]): Database Statistics"
|
||||
tkwait window $w
|
||||
}
|
||||
|
||||
proc do_gc {} {
|
||||
set w [console::new {gc} {Compressing the object database}]
|
||||
console::chain {
|
||||
{exec {git pack-refs --prune}}
|
||||
{exec {git reflog expire --all}}
|
||||
{exec {git repack -a -d -l}}
|
||||
{exec {git rerere gc}}
|
||||
} $w
|
||||
}
|
||||
|
||||
proc do_fsck_objects {} {
|
||||
set w [console::new {fsck-objects} \
|
||||
{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
|
||||
}
|
||||
Reference in New Issue
Block a user