diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2007-10-12 16:24:20 -0400 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2007-10-12 23:07:58 -0400 |
commit | ba6c761e6287f9987d70ed4d2a609a7ed415a6a5 (patch) | |
tree | a9711587e0abf62c479ea67c115f4a5a1f47538a /lib | |
parent | 51a41ac4efd8bcbcf2aa6e738c42ae4d46d10947 (diff) | |
download | git-ba6c761e6287f9987d70ed4d2a609a7ed415a6a5.tar.gz |
git-gui: Support cloning Cygwin based work-dirs
If the user tries to clone a Git repository that is actually a
workdir of another repository (by way of contrib git-new-workdir)
then the contents of .git is a series of Windows .lnk files which
Tcl can't read if this is a native Tcl process. To read the real
objects directory we need to resolve the link to that location.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/choose_repository.tcl | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/lib/choose_repository.tcl b/lib/choose_repository.tcl index e66df85964..bf04361464 100644 --- a/lib/choose_repository.tcl +++ b/lib/choose_repository.tcl @@ -324,9 +324,42 @@ proc _is_git {path} { && [file exists [file join $path config]]} { return 1 } + if {[is_Cygwin]} { + if {[file exists [file join $path HEAD]] + && [file exists [file join $path objects.lnk]] + && [file exists [file join $path config.lnk]]} { + return 1 + } + } return 0 } +proc _objdir {path} { + set objdir [file join $path .git objects] + if {[file isdirectory $objdir]} { + return $objdir + } + + set objdir [file join $path objects] + if {[file isdirectory $objdir]} { + return $objdir + } + + if {[is_Cygwin]} { + set objdir [file join $path .git objects.lnk] + if {[file isfile $objdir]} { + return [win32_read_lnk $objdir] + } + + set objdir [file join $path objects.lnk] + if {[file isfile $objdir]} { + return [win32_read_lnk $objdir] + } + } + + return {} +} + ###################################################################### ## ## Create New Repository @@ -555,13 +588,10 @@ method _do_clone2 {} { } if {$clone_type eq {hardlink} || $clone_type eq {shared}} { - set objdir [file join $origin_url .git objects] - if {![file isdirectory $objdir]} { - set objdir [file join $origin_url objects] - if {![file isdirectory $objdir]} { - error_popup [mc "Not a Git repository: %s" [file tail $origin_url]] - return - } + set objdir [_objdir $origin_url] + if {$objdir eq {}} { + error_popup [mc "Not a Git repository: %s" [file tail $origin_url]] + return } } |