Commits

Anonymous committed 3b9dfde

git-gui: Assume untracked directories are Git submodules

If `git ls-files --others` returned us the name of a directory then
it is because Git has decided that this directory itself contains a
valid Git repository and its files shouldn't be listed as untracked
for this repository.

In such a case we should label the object as a Git repository and
not just as a directory.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

  • Participants
  • Parent commits 4ed1a19

Comments (0)

Files changed (1)

File lib/diff.tcl

 	#
 	if {$m eq {_O}} {
 		set max_sz [expr {128 * 1024}]
+		set type unknown
 		if {[catch {
-				if {[file type $path] == {link}} {
+				set type [file type $path]
+				switch -- $type {
+				directory {
+					set type submodule
+					set content {}
+					set sz 0
+				}
+				link {
 					set content [file readlink $path]
 					set sz [string length $content]
-				} else {
+				}
+				file {
 					set fd [open $path r]
 					fconfigure $fd -eofchar {}
 					set content [read $fd $max_sz]
 					close $fd
 					set sz [file size $path]
 				}
+				default {
+					error "'$type' not supported"
+				}
+				}
 			} err ]} {
 			set diff_active 0
 			unlock_index
 			return
 		}
 		$ui_diff conf -state normal
-		if {![catch {set type [exec file $path]}]} {
+		if {$type eq {submodule}} {
+			$ui_diff insert end "* Git Repository (subproject)\n" d_@
+		} elseif {![catch {set type [exec file $path]}]} {
 			set n [string length $path]
 			if {[string equal -length $n $path $type]} {
 				set type [string range $type $n end]