summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2008-01-16 06:14:42 (GMT)
committerShawn O. Pearce <spearce@spearce.org>2008-01-16 06:14:42 (GMT)
commitd36a8f73a4201ab21a553b5caa5b890b8f1d7213 (patch)
tree65da41c58462ee0c5c587a7c017df7dfbf58a546 /lib
parentdaaa958fcc4f829dbd7dac46c39c15f77507495a (diff)
downloadgit-d36a8f73a4201ab21a553b5caa5b890b8f1d7213.zip
git-d36a8f73a4201ab21a553b5caa5b890b8f1d7213.tar.gz
git-d36a8f73a4201ab21a553b5caa5b890b8f1d7213.tar.bz2
git-gui: Allow 'Create New Repository' on existing directories
Often users setup a few source files and get a project rolling before they create a Git repository for it. In such cases the core Git tools allow users to initialize a new repository by simply running `git init` at the desired root level directory. We need to allow the same situation in git-gui; if the user is trying to make a new repository we should let them do that to any location they chose. If the directory already exists and already has files contained within it we still should allow the user to create a repository there. However we still need to disallow creating a repository on top of an existing repository. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/choose_repository.tcl50
1 files changed, 22 insertions, 28 deletions
diff --git a/lib/choose_repository.tcl b/lib/choose_repository.tcl
index 2bac50e..86faf24 100644
--- a/lib/choose_repository.tcl
+++ b/lib/choose_repository.tcl
@@ -290,11 +290,6 @@ method _write_local_path {args} {
}
method _git_init {} {
- if {[file exists $local_path]} {
- error_popup [mc "Location %s already exists." $local_path]
- return 0
- }
-
if {[catch {file mkdir $local_path} err]} {
error_popup [strcat \
[mc "Failed to create repository %s:" $local_path] \
@@ -417,41 +412,35 @@ method _new_local_path {} {
if {$p eq {}} return
set p [file normalize $p]
- if {[file isdirectory $p]} {
- foreach i [glob \
- -directory $p \
- -tails \
- -nocomplain \
- * .*] {
- switch -- $i {
- . continue
- .. continue
- default {
- error_popup [mc "Directory %s already exists." $p]
- return
- }
- }
- }
- if {[catch {file delete $p} err]} {
- error_popup [strcat \
- [mc "Directory %s already exists." $p] \
- "\n\n$err"]
- return
- }
- } elseif {[file exists $p]} {
- error_popup [mc "File %s already exists." $p]
+ if {![_new_ok $p]} {
return
}
set local_path $p
}
method _do_new2 {} {
+ if {![_new_ok $local_path]} {
+ return
+ }
if {![_git_init $this]} {
return
}
set done 1
}
+proc _new_ok {p} {
+ if {[file isdirectory $p]} {
+ if {[_is_git [file join $p .git]]} {
+ error_popup [mc "Directory %s already exists." $p]
+ return 0
+ }
+ } elseif {[file exists $p]} {
+ error_popup [mc "File %s already exists." $p]
+ return 0
+ }
+ return 1
+}
+
######################################################################
##
## Clone Existing Repository
@@ -607,6 +596,11 @@ method _do_clone2 {} {
}
}
+ if {[file exists $local_path]} {
+ error_popup [mc "Location %s already exists." $local_path]
+ return
+ }
+
if {![_git_init $this]} return
set local_path [pwd]