Code

git-gui: show unstaged symlinks in diff viewer
authorMichele Ballabio <barra_cuda@katamail.com>
Sun, 9 Sep 2007 19:04:45 +0000 (21:04 +0200)
committerShawn O. Pearce <spearce@spearce.org>
Sun, 9 Sep 2007 23:47:22 +0000 (19:47 -0400)
git-gui has a minor problem with regards to symlinks that point
to directories.

git init
mkdir realdir
ln -s realdir linkdir
git gui

Now clicking on file names in the "unstaged changes" window,
there's a problem coming from the "linkdir" symlink: git-gui
complains with

error reading "file4": illegal operation on a directory

...even though git-gui can add that same symlink to the index just
fine.

This patch fix this by adding a check.

[sp: Minor fix to use {link} instead of "link" in condition
     and to only open the path if it is not a symlink.]

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
lib/diff.tcl

index e09e1257e1be299caceb0c6f0074c1b43b566974..9eeff2ed3590da610ce5eb2243f6d9d4474366c3 100644 (file)
@@ -85,11 +85,16 @@ proc show_diff {path w {lno {}}} {
        if {$m eq {_O}} {
                set max_sz [expr {128 * 1024}]
                if {[catch {
-                               set fd [open $path r]
-                               fconfigure $fd -eofchar {}
-                               set content [read $fd $max_sz]
-                               close $fd
-                               set sz [file size $path]
+                               if {[file type $path] == {link}} {
+                                       set content [file readlink $path]
+                                       set sz [string length $content]
+                               } else {
+                                       set fd [open $path r]
+                                       fconfigure $fd -eofchar {}
+                                       set content [read $fd $max_sz]
+                                       close $fd
+                                       set sz [file size $path]
+                               }
                        } err ]} {
                        set diff_active 0
                        unlock_index