Skip to content

Commit

Permalink
git-gui: Limit display to a maximum number of files
Browse files Browse the repository at this point in the history
When there is a large number of new or modified files,
"display_all_files" takes a long time, and git-gui appears to hang.

This change limits the number of files that are displayed.  This
limit can be set as gui.maxfilesdisplayed, and is 5000 by default.

A warning is shown the first time the list of files is truncated
in this GUI session.  Subsequent truncations are not mentioned to
the user.

Signed-off-by: Dan Zwell <dzwell@zwell.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
  • Loading branch information
Dan Zwell authored and Shawn O. Pearce committed Aug 12, 2009
1 parent 2112be7 commit dd6451f
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
17 changes: 16 additions & 1 deletion git-gui.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"}}
Expand Down Expand Up @@ -1698,10 +1700,12 @@ proc display_all_files_helper {w path icon_name m} {
$w insert end "[escape_path $path]\n"
}
set files_warning 0
proc display_all_files {} {
global ui_index ui_workdir
global file_states file_lists
global last_clicked
global files_warning
$ui_index conf -state normal
$ui_workdir conf -state normal
Expand All @@ -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 [get_config gui.maxfilesdisplayed]
if {[llength $to_display] > $display_limit} {
if {!$files_warning} {
# do not repeatedly warn:
set files_warning 1
info_popup [mc "Displaying only %s of %s files." \
$display_limit [llength $to_display]]
}
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]
Expand Down
5 changes: 5 additions & 0 deletions po/git-gui.pot
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ msgstr ""
msgid "Ready."
msgstr ""

#: git-gui.sh:1726
#, tcl-format
msgid "Displaying only %s of %s files."
msgstr ""

#: git-gui.sh:1819
msgid "Unmodified"
msgstr ""
Expand Down

0 comments on commit dd6451f

Please sign in to comment.