summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2007-09-10 00:13:10 (GMT)
committerShawn O. Pearce <spearce@spearce.org>2007-09-10 00:39:42 (GMT)
commit3b9dfde3d636aeb961318d41b3ab59f72414d010 (patch)
treed9e1c2d615cdec9147414988b753c98eaf2fe13e /lib
parent4ed1a190d09c7d6a248038edb11addda77af7550 (diff)
downloadgit-3b9dfde3d636aeb961318d41b3ab59f72414d010.zip
git-3b9dfde3d636aeb961318d41b3ab59f72414d010.tar.gz
git-3b9dfde3d636aeb961318d41b3ab59f72414d010.tar.bz2
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>
Diffstat (limited to 'lib')
-rw-r--r--lib/diff.tcl21
1 files changed, 18 insertions, 3 deletions
diff --git a/lib/diff.tcl b/lib/diff.tcl
index a1d5e52..694834a 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]