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]]} {
|
&& [file exists [file join $path config]]} {
|
||||||
return 1
|
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
|
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
|
## Create New Repository
|
||||||
|
@ -555,15 +588,12 @@ method _do_clone2 {} {
|
||||||
}
|
}
|
||||||
|
|
||||||
if {$clone_type eq {hardlink} || $clone_type eq {shared}} {
|
if {$clone_type eq {hardlink} || $clone_type eq {shared}} {
|
||||||
set objdir [file join $origin_url .git objects]
|
set objdir [_objdir $origin_url]
|
||||||
if {![file isdirectory $objdir]} {
|
if {$objdir eq {}} {
|
||||||
set objdir [file join $origin_url objects]
|
|
||||||
if {![file isdirectory $objdir]} {
|
|
||||||
error_popup [mc "Not a Git repository: %s" [file tail $origin_url]]
|
error_popup [mc "Not a Git repository: %s" [file tail $origin_url]]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
set giturl $origin_url
|
set giturl $origin_url
|
||||||
if {[is_Cygwin] && [file isdirectory $giturl]} {
|
if {[is_Cygwin] && [file isdirectory $giturl]} {
|
||||||
|
|
Loading…
Reference in New Issue