summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2007-10-12 20:24:20 (GMT)
committerShawn O. Pearce <spearce@spearce.org>2007-10-13 03:07:58 (GMT)
commitba6c761e6287f9987d70ed4d2a609a7ed415a6a5 (patch)
treea9711587e0abf62c479ea67c115f4a5a1f47538a
parent51a41ac4efd8bcbcf2aa6e738c42ae4d46d10947 (diff)
downloadgit-ba6c761e6287f9987d70ed4d2a609a7ed415a6a5.zip
git-ba6c761e6287f9987d70ed4d2a609a7ed415a6a5.tar.gz
git-ba6c761e6287f9987d70ed4d2a609a7ed415a6a5.tar.bz2
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>
-rw-r--r--lib/choose_repository.tcl44
1 files changed, 37 insertions, 7 deletions
diff --git a/lib/choose_repository.tcl b/lib/choose_repository.tcl
index e66df85..bf04361 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
}
}