git-gui: Fixes chooser not accepting gitfiles
authorRemi Rampin <remirampin@gmail.com>
Fri, 6 Mar 2015 16:21:52 +0000 (11:21 -0500)
committerPat Thoyts <patthoyts@users.sourceforge.net>
Sat, 7 Mar 2015 12:28:58 +0000 (12:28 +0000)
Support the case where .git is a platform independent symbolic link
and not a directory. This occurs when --separate-git-dir is used when
creating the local repository to store the .git directory elsewhere.

git-gui does not support such repositories when using the repository
chooser as the test to determine that the chosen directory is a git
repository fails for such repositories.

This commit enables _is_git to read the real location from the
symbolic link file.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Remi Rampin <remirampin@gmail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
lib/choose_repository.tcl

index 92d6022..abc6b1d 100644 (file)
@@ -339,6 +339,16 @@ method _git_init {} {
 }
 
 proc _is_git {path} {
+       if {[file isfile $path]} {
+               set fp [open $path r]
+               gets $fp line
+               close $fp
+               if {[regexp "^gitdir: (.+)$" $line line link_target]} {
+                       set path [file join [file dirname $path] $link_target]
+                       set path [file normalize $path]
+               }
+       }
+
        if {[file exists [file join $path HEAD]]
         && [file exists [file join $path objects]]
         && [file exists [file join $path config]]} {