Skip to contentSkip to conversation

git-gui: fix problem with "important" files not shown if, gui.maxfilesdisplayed is exceeded

PATCH New Csaba Kiraly 2 participants 3 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 git-gui: fix problem with "important" files not shown if, gui.maxfilesdisplayed is exceeded

gui.maxfilesdisplayed (added in dd6451f9c7c5a36d3006231b618ac6da06c7c7b4) was applied brute force on the file list in alphabetic order. As a result, files that had modifications might not be displayed by git-gui. Even worse, files that are already in the index might not be displayed, which makes git-gui unusable.

This fix changes the meaning of gui.maxfilesdisplayed, making it a soft limit that only applies to "_O" files, i.e. files that are "Untracked, not staged".

---
 git-gui.sh | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)
git-gui.sh +12 -9
index bf68699..f86a948 100755
@@ -1967,20 +1967,22 @@ proc display_all_files {} {
 
     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}]]
-    }
+    set displayed 0
     foreach path $to_display {
         set s $file_states($path)
         set m [lindex $s 0]
         set icon_name [lindex $s 1]
 
+        if {$displayed > $display_limit && [string index $m 1] eq {O} } {
+            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]]
+            }
+            continue
+        }
+
         set s [string index $m 0]
         if {$s ne {U} && $s ne {_}} {
             display_all_files_helper $ui_index $path \
@@ -1995,6 +1997,7 @@ proc display_all_files {} {
         if {$s ne {_}} {
             display_all_files_helper $ui_workdir $path \
                 $icon_name $s
+            incr displayed
         }
     }
 
Signature · 1 line
1.9.1
#1 lore raw

PATCH v2 1/1 git-gui: fix problem with gui.maxfilesdisplayed

gui.maxfilesdisplayed (added in dd6451f9c7c5a36d3006231b618ac6da06c7c7b4) was applied brute force on the file list in alphabetic order. As a result, files that had modifications might not be displayed by git-gui. Even worse, files that are already in the index might not be displayed, which makes git-gui hard to use in some workflows.

This fix changes the meaning of gui.maxfilesdisplayed, making it a soft limit that only applies to "_O" files, i.e. files that are "Untracked, not staged".

---
 git-gui.sh | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)
git-gui.sh +12 -9
index 27ce0e3..0e4b05a 100755
@@ -1965,20 +1965,22 @@ proc display_all_files {} {
 
 	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}]]
-	}
+	set displayed 0
 	foreach path $to_display {
 		set s $file_states($path)
 		set m [lindex $s 0]
 		set icon_name [lindex $s 1]
 
+		if {$displayed > $display_limit && [string index $m 1] eq {O} } {
+			if {!$files_warning} {
+				# do not repeatedly warn:
+				set files_warning 1
+				info_popup [mc "Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files." \
+					$display_limit [llength $to_display]]
+			}
+			continue
+		}
+
 		set s [string index $m 0]
 		if {$s ne {U} && $s ne {_}} {
 			display_all_files_helper $ui_index $path \
@@ -1993,6 +1995,7 @@ proc display_all_files {} {
 		if {$s ne {_}} {
 			display_all_files_helper $ui_workdir $path \
 				$icon_name $s
+			incr displayed
 		}
 	}
 
Signature · 1 line
1.9.1
#2 lore raw

Re: [PATCH v2] git-gui: fix problem with gui.maxfilesdisplayed

Quoted 52 lines · Csaba Kiraly

gui.maxfilesdisplayed (added in dd6451f9c7c5a36d3006231b618ac6da06c7c7b4) was applied brute force on the file list in alphabetic order. As a result, files that had modifications might not be displayed by git-gui. Even worse, files that are already in the index might not be displayed, which makes git-gui hard to use in some workflows.

This fix changes the meaning of gui.maxfilesdisplayed, making it a soft limit that only applies to "_O" files, i.e. files that are "Untracked, not staged".

---
git-gui.sh | 21 ++++++++++++---------

1 file changed, 12 insertions(+), 9 deletions(-)
git-gui.sh +11 -9
index 27ce0e3..0e4b05a 100755
@@ -1965,20 +1965,22 @@ proc display_all_files {} {
 
 	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}]]
-	}
+	set displayed 0
 	foreach path $to_display {
 		set s $file_states($path)
 		set m [lindex $s 0]
 		set icon_name [lindex $s 1]
 
+		if {$displayed > $display_limit && [string index $m 1] eq {O} } {
+			if {!$files_warning} {
+				# do not repeatedly warn:
+				set files_warning 1
+				info_popup [mc "Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files." \
+					$display_limit [llength $to_display]]
+			}
+			continue
+		}
+
 		set s [string index $m 0]
 		if {$s ne {U} && $s ne {_}} {
 			display_all_files_helper $ui_index $path \

git-gui.sh proc display_all_files {} { · line 2000

Quoted 6 lines
git-gui.sh +1 -0
@@ -1993,6 +1995,7 @@ proc display_all_files {} {
 		if {$s ne {_}} {
 			display_all_files_helper $ui_workdir $path \
 				$icon_name $s
+			incr displayed
 		}
 	}

I found a way to test this and it seems fine. The message box points out the new controlling config variable which is good. Applied to the master branch.

Signature · 2 lines
Pat Thoyts                            http://www.patthoyts.tk/
PGP fingerprint 2C 6E 98 07 2C 59 C8 97  10 CE 11 E6 04 E0 B9 DD