git-gui: Provide an after-rescan script to rescan.
[gitweb.git] / git-gui
diff --git a/git-gui b/git-gui
index a1266fe7a72977148a5028f3c479ee33bad2a8e9..2c8501eebfba986aa9b3e482292e94f395abdef8 100755 (executable)
--- a/git-gui
+++ b/git-gui
@@ -181,7 +181,7 @@ if {$appname eq {git-citool}} {
 ##
 ## task management
 
-set status_active 0
+set rescan_active 0
 set diff_active 0
 set last_clicked {}
 
@@ -234,13 +234,13 @@ proc repository_state {hdvar ctvar} {
        }
 }
 
-proc rescan {{final Ready.}} {
+proc rescan {after} {
        global HEAD PARENT commit_type
        global ui_index ui_other ui_status_value ui_comm
-       global status_active file_states
+       global rescan_active file_states
        global repo_config
 
-       if {$status_active || ![lock_index read]} return
+       if {$rescan_active > 0 || ![lock_index read]} return
 
        repository_state new_HEAD new_type
        if {$commit_type eq {amend}
@@ -265,9 +265,9 @@ proc rescan {{final Ready.}} {
        }
 
        if {$repo_config(gui.trustmtime) eq {true}} {
-               rescan_stage2 {} $final
+               rescan_stage2 {} $after
        } else {
-               set status_active 1
+               set rescan_active 1
                set ui_status_value {Refreshing file status...}
                set cmd [list git update-index]
                lappend cmd -q
@@ -277,14 +277,14 @@ proc rescan {{final Ready.}} {
                set fd_rf [open "| $cmd" r]
                fconfigure $fd_rf -blocking 0 -translation binary
                fileevent $fd_rf readable \
-                       [list rescan_stage2 $fd_rf $final]
+                       [list rescan_stage2 $fd_rf $after]
        }
 }
 
-proc rescan_stage2 {fd final} {
+proc rescan_stage2 {fd after} {
        global gitdir PARENT commit_type
        global ui_index ui_other ui_status_value ui_comm
-       global status_active
+       global rescan_active
        global buf_rdi buf_rdf buf_rlo
 
        if {$fd ne {}} {
@@ -304,7 +304,7 @@ proc rescan_stage2 {fd final} {
        set buf_rdf {}
        set buf_rlo {}
 
-       set status_active 3
+       set rescan_active 3
        set ui_status_value {Scanning for modified files ...}
        set fd_di [open "| git diff-index --cached -z $PARENT" r]
        set fd_df [open "| git diff-files -z" r]
@@ -313,9 +313,9 @@ proc rescan_stage2 {fd final} {
        fconfigure $fd_di -blocking 0 -translation binary
        fconfigure $fd_df -blocking 0 -translation binary
        fconfigure $fd_lo -blocking 0 -translation binary
-       fileevent $fd_di readable [list read_diff_index $fd_di $final]
-       fileevent $fd_df readable [list read_diff_files $fd_df $final]
-       fileevent $fd_lo readable [list read_ls_others $fd_lo $final]
+       fileevent $fd_di readable [list read_diff_index $fd_di $after]
+       fileevent $fd_df readable [list read_diff_files $fd_df $after]
+       fileevent $fd_lo readable [list read_ls_others $fd_lo $after]
 }
 
 proc load_message {file} {
@@ -335,7 +335,7 @@ proc load_message {file} {
        return 0
 }
 
-proc read_diff_index {fd final} {
+proc read_diff_index {fd after} {
        global buf_rdi
 
        append buf_rdi [read $fd]
@@ -361,10 +361,10 @@ proc read_diff_index {fd final} {
                set buf_rdi {}
        }
 
-       status_eof $fd buf_rdi $final
+       rescan_done $fd buf_rdi $after
 }
 
-proc read_diff_files {fd final} {
+proc read_diff_files {fd after} {
        global buf_rdf
 
        append buf_rdf [read $fd]
@@ -390,10 +390,10 @@ proc read_diff_files {fd final} {
                set buf_rdf {}
        }
 
-       status_eof $fd buf_rdf $final
+       rescan_done $fd buf_rdf $after
 }
 
-proc read_ls_others {fd final} {
+proc read_ls_others {fd after} {
        global buf_rlo
 
        append buf_rlo [read $fd]
@@ -402,18 +402,18 @@ proc read_ls_others {fd final} {
        foreach p [lrange $pck 0 end-1] {
                display_file $p _O
        }
-       status_eof $fd buf_rlo $final
+       rescan_done $fd buf_rlo $after
 }
 
-proc status_eof {fd buf final} {
-       global status_active ui_status_value
+proc rescan_done {fd buf after} {
+       global rescan_active
        global file_states repo_config
        upvar $buf to_clear
 
        if {![eof $fd]} return
        set to_clear {}
        close $fd
-       if {[incr status_active -1] > 0} return
+       if {[incr rescan_active -1] > 0} return
 
        prune_selection
        unlock_index
@@ -434,7 +434,7 @@ proc status_eof {fd buf final} {
        }
 
        reshow_diff
-       set ui_status_value $final
+       uplevel #0 $after
 }
 
 proc prune_selection {} {
@@ -684,7 +684,7 @@ proc load_last_commit {} {
                set commit_type amend
                set HEAD {}
                set PARENT {}
-               rescan
+               rescan {set ui_status_value {Ready.}}
        } elseif {$parent_count == 1} {
                set commit_type amend
                set PARENT $parent
@@ -692,7 +692,7 @@ proc load_last_commit {} {
                $ui_comm insert end $msg
                $ui_comm edit modified false
                $ui_comm edit reset
-               rescan
+               rescan {set ui_status_value {Ready.}}
        } else {
                error_popup {You can't amend a merge commit.}
                return
@@ -720,7 +720,7 @@ repository since our last scan.  A rescan is required
 before committing.
 }
                unlock_index
-               rescan
+               rescan {set ui_status_value {Ready.}}
                return
        }
 
@@ -987,7 +987,7 @@ repository since our last scan.  A rescan is required
 before a pull can be started.
 }
                unlock_index
-               rescan
+               rescan {set ui_status_value {Ready.}}
                return
        }
 
@@ -1024,10 +1024,10 @@ proc post_pull_remote {remote branch success} {
        if {$success} {
                repository_state HEAD commit_type
                set PARENT $HEAD
-               set $ui_status_value {Ready.}
+               set $ui_status_value "Pulling $branch from $remote complete."
        } else {
-               rescan \
-                       "Conflicts detected while pulling $branch from $remote."
+               set m "Conflicts detected while pulling $branch from $remote."
+               rescan "set ui_status_value {$m}"
        }
 }
 
@@ -1115,10 +1115,10 @@ proc merge_state {path new_state} {
 }
 
 proc display_file {path state} {
-       global file_states file_lists selected_paths status_active
+       global file_states file_lists selected_paths rescan_active
 
        set old_m [merge_state $path $state]
-       if {$status_active} return
+       if {$rescan_active > 0} return
 
        set s $file_states($path)
        set new_m [lindex $s 0]
@@ -1744,7 +1744,7 @@ proc do_quit {} {
 }
 
 proc do_rescan {} {
-       rescan
+       rescan {set ui_status_value {Ready.}}
 }
 
 proc do_include_all {} {
@@ -2559,4 +2559,4 @@ if {!$single_commit} {
        populate_remote_menu .mbar.push To push_to
        populate_pull_menu .mbar.pull
 }
-after 1 rescan
+after 1 do_rescan