Skip to content

Commit

Permalink
git-gui: Assume untracked directories are Git submodules
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Shawn O. Pearce committed Sep 10, 2007
1 parent 4ed1a19 commit 3b9dfde
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions lib/diff.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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]
Expand Down

0 comments on commit 3b9dfde

Please sign in to comment.