diff --git a/lib/status_bar.tcl b/lib/status_bar.tcl
index a6dea2900657a569fdd1047753806a9a6d194c23..72a8fe1fd36932efcb1e2f2e18e4200150436854 100644 (file)
--- a/lib/status_bar.tcl
+++ b/lib/status_bar.tcl
field status {}; # single line of text we show
field prefix {}; # text we format into status
field units {}; # unit of progress
+field meter {}; # current core git progress meter (if active)
constructor new {path} {
set w $path
set status $msg
set prefix $msg
set units $uds
+ set meter {}
}
method update {have total} {
$w_c coords bar 0 0 $pdone 20
}
-method stop {msg} {
+method update_meter {buf} {
+ append meter $buf
+ set r [string last "\r" $meter]
+ if {$r == -1} {
+ return
+ }
+
+ set prior [string range $meter 0 $r]
+ set meter [string range $meter [expr {$r + 1}] end]
+ if {[regexp "\\((\\d+)/(\\d+)\\)\\s+done\r\$" $prior _j a b]} {
+ update $this $a $b
+ }
+}
+
+method stop {{msg {}}} {
destroy $w_c
- set status $msg
+ if {$msg ne {}} {
+ set status $msg
+ }
}
-method show {msg} {
- set status $msg
+method show {msg {test {}}} {
+ if {$test eq {} || $status eq $test} {
+ set status $msg
+ }
}
method _delete {current} {