diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2007-09-09 20:13:10 -0400 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2007-09-09 20:39:42 -0400 |
commit | 3b9dfde3d636aeb961318d41b3ab59f72414d010 (patch) | |
tree | d9e1c2d615cdec9147414988b753c98eaf2fe13e | |
parent | 4ed1a190d09c7d6a248038edb11addda77af7550 (diff) | |
download | git-3b9dfde3d636aeb961318d41b3ab59f72414d010.tar.gz git-3b9dfde3d636aeb961318d41b3ab59f72414d010.tar.xz |
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>
-rw-r--r-- | lib/diff.tcl | 21 |
1 files changed, 18 insertions, 3 deletions
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] |