summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2007-09-10 00:56:04 (GMT)
committerShawn O. Pearce <spearce@spearce.org>2007-09-10 01:02:57 (GMT)
commit5f51ccd2598977694d383e9059e89cafb9ae1214 (patch)
tree8dc3b020c388cecb38039108ef149bd7a2a40f52
parentb2bd31006f02debe1ddf4fa8b73c52281516a871 (diff)
parent8938410189315979255c1dfcc3c0b7a4bf9953e5 (diff)
downloadgit-5f51ccd2598977694d383e9059e89cafb9ae1214.zip
git-5f51ccd2598977694d383e9059e89cafb9ae1214.tar.gz
git-5f51ccd2598977694d383e9059e89cafb9ae1214.tar.bz2
Merge branch 'maint'
* maint: git-gui: Trim trailing slashes from untracked submodule names git-gui: Assume untracked directories are Git submodules git-gui: handle "deleted symlink" diff marker git-gui: show unstaged symlinks in diff viewer
-rwxr-xr-xgit-gui.sh6
-rw-r--r--lib/diff.tcl36
2 files changed, 35 insertions, 7 deletions
diff --git a/git-gui.sh b/git-gui.sh
index daab7e4..36ba849 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -1029,7 +1029,11 @@ proc read_ls_others {fd after} {
set pck [split $buf_rlo "\0"]
set buf_rlo [lindex $pck end]
foreach p [lrange $pck 0 end-1] {
- merge_state [encoding convertfrom $p] ?O
+ set p [encoding convertfrom $p]
+ if {[string index $p end] eq {/}} {
+ set p [string range $p 0 end-1]
+ }
+ merge_state $p ?O
}
rescan_done $fd buf_rlo $after
}
diff --git a/lib/diff.tcl b/lib/diff.tcl
index b1129d5..d013409 100644
--- a/lib/diff.tcl
+++ b/lib/diff.tcl
@@ -84,12 +84,30 @@ proc show_diff {path w {lno {}}} {
#
if {$m eq {_O}} {
set max_sz [expr {128 * 1024}]
+ set type unknown
if {[catch {
- set fd [open $path r]
- fconfigure $fd -eofchar {}
- set content [read $fd $max_sz]
- close $fd
- set sz [file size $path]
+ 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]
+ }
+ 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
@@ -98,7 +116,12 @@ 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 [append \
+ "* " \
+ [mc "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]
@@ -198,6 +221,7 @@ proc read_diff {fd} {
if {[string match {mode *} $line]
|| [string match {new file *} $line]
|| [string match {deleted file *} $line]
+ || [string match {deleted symlink} $line]
|| [string match {Binary files * and * differ} $line]
|| $line eq {\ No newline at end of file}
|| [regexp {^\* Unmerged path } $line]} {