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>maint
parent
51a41ac4ef
commit
ba6c761e62
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue