summaryrefslogtreecommitdiff
path: root/lib/diff.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/diff.tcl')
-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]