When there is a large number of new or modified files, "display_all_files" takes a long time, and git-gui appears to hang. Limit the display to 5000 files, by default. This number is configurable as gui.maxfilesdisplayed. Show a warning if the list of files is truncated. Signed-off-by: Dan Zwell <dzwell@xxxxxxxxx> --- git-gui.sh | 17 ++++++++++++++++- 1 files changed, 16 insertions(+), 1 deletions(-) diff --git a/git-gui.sh b/git-gui.sh index 14b92ba..5a20923 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -745,6 +745,8 @@ set default_config(gui.newbranchtemplate) {} set default_config(gui.spellingdictionary) {} set default_config(gui.fontui) [font configure font_ui] set default_config(gui.fontdiff) [font configure font_diff] +# TODO: this option should be added to the git-config documentation +set default_config(gui.maxfilesdisplayed) 5000 set font_descs { {fontui font_ui {mc "Main Font"}} {fontdiff font_diff {mc "Diff/Console Font"}} @@ -1702,6 +1704,8 @@ proc display_all_files {} { global ui_index ui_workdir global file_states file_lists global last_clicked + global files_warning + global default_config $ui_index conf -state normal $ui_workdir conf -state normal @@ -1713,7 +1717,18 @@ proc display_all_files {} { set file_lists($ui_index) [list] set file_lists($ui_workdir) [list] - foreach path [lsort [array names file_states]] { + set to_display [lsort [array names file_states]] + set display_limit $default_config(gui.maxfilesdisplayed) + if {[llength $to_display] > $display_limit} { + if {![info exists files_warning] || !$files_warning} { + set warning "Displaying only $display_limit of " + append warning "[llength $to_display] files." + info_popup [mc $warning] + set files_warning 1 + } + set to_display [lrange $to_display 0 [expr {$display_limit-1}]] + } + foreach path $to_display { set s $file_states($path) set m [lindex $s 0] set icon_name [lindex $s 1] -- 1.6.3.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html