summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9396cd3)
raw | patch | inline | side by side (parent: 9396cd3)
author | Paul Mackerras <paulus@samba.org> | |
Tue, 26 Jun 2007 01:09:49 +0000 (11:09 +1000) | ||
committer | Paul Mackerras <paulus@samba.org> | |
Tue, 26 Jun 2007 01:14:06 +0000 (11:14 +1000) |
Since git reset now gets chatty while resetting, we were getting errors
reported when a reset was done using the "reset branch to here" menu
item. With this we now read the progress messages from git reset and
update a progress bar. Because git reset outputs the progress messages
to standard error, and Tcl treats messages to standard error as error
messages, we have to invoke git reset via a shell and redirect standard
error into standard output.
This also fixes a bug in computing descendent heads when head ids
are changed via a reset.
Signed-off-by: Paul Mackerras <paulus@samba.org>
reported when a reset was done using the "reset branch to here" menu
item. With this we now read the progress messages from git reset and
update a progress bar. Because git reset outputs the progress messages
to standard error, and Tcl treats messages to standard error as error
messages, we have to invoke git reset via a shell and redirect standard
error into standard output.
This also fixes a bug in computing descendent heads when head ids
are changed via a reset.
Signed-off-by: Paul Mackerras <paulus@samba.org>
gitk | patch | blob | history |
index 72a914590c03ca24673bb61ffebebfe6d447848f..269f9b08a0691b4741f85b714191998006513756 100755 (executable)
--- a/gitk
+++ b/gitk
bind $w <Visibility> "grab $w; focus $w"
tkwait window $w
if {!$confirm_ok} return
- dohidelocalchanges
- if {[catch {exec git reset --$resettype $rowmenuid} err]} {
+ if {[catch {set fd [open \
+ [list | sh -c "git reset --$resettype $rowmenuid 2>&1"] r]} err]} {
error_popup $err
} else {
- set oldhead $mainheadid
- movedhead $rowmenuid $mainhead
- set mainheadid $rowmenuid
+ dohidelocalchanges
+ set w ".resetprogress"
+ filerun $fd [list readresetstat $fd $w]
+ toplevel $w
+ wm transient $w
+ wm title $w "Reset progress"
+ message $w.m -text "Reset in progress, please wait..." \
+ -justify center -aspect 1000
+ pack $w.m -side top -fill x -padx 20 -pady 5
+ canvas $w.c -width 150 -height 20 -bg white
+ $w.c create rect 0 0 0 20 -fill green -tags rect
+ pack $w.c -side top -fill x -padx 20 -pady 5 -expand 1
+ nowbusy reset
+ }
+}
+
+proc readresetstat {fd w} {
+ global mainhead mainheadid showlocalchanges
+
+ if {[gets $fd line] >= 0} {
+ if {[regexp {([0-9]+)% \(([0-9]+)/([0-9]+)\)} $line match p m n]} {
+ set x [expr {($m * 150) / $n}]
+ $w.c coords rect 0 0 $x 20
+ }
+ return 1
+ }
+ destroy $w
+ notbusy reset
+ if {[catch {close $fd} err]} {
+ error_popup $err
+ }
+ set oldhead $mainheadid
+ set newhead [exec git rev-parse HEAD]
+ if {$newhead ne $oldhead} {
+ movehead $newhead $mainhead
+ movedhead $newhead $mainhead
+ set mainheadid $newhead
redrawtags $oldhead
- redrawtags $rowmenuid
+ redrawtags $newhead
}
if {$showlocalchanges} {
doshowlocalchanges
}
+ return 0
}
# context menu for a head
}
foreach a $arcnos($id) {
if {$archeads($a) ne {}} {
- set ret [concat $ret $archeads($a)]
+ validate_archeads $a
+ if {$archeads($a) ne {}} {
+ set ret [concat $ret $archeads($a)]
+ }
}
set d $arcstart($a)
if {![info exists seen($d)]} {