From: Shawn O. Pearce Date: Mon, 10 Sep 2007 00:13:10 +0000 (-0400) Subject: git-gui: Assume untracked directories are Git submodules X-Git-Tag: gitgui-0.8.3~7 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=3b9dfde3d636aeb961318d41b3ab59f72414d010;p=git.git 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 --- diff --git a/lib/diff.tcl b/lib/diff.tcl index a1d5e523d..694834ab7 100644 --- a/lib/diff.tcl +++ b/lib/diff.tcl @@ -84,17 +84,30 @@ proc show_diff {path w {lno {}}} { # 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 @@ -103,7 +116,9 @@ proc show_diff {path w {lno {}}} { 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]