aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2008-01-16 01:14:42 -0500
committerShawn O. Pearce <spearce@spearce.org>2008-01-16 01:14:42 -0500
commitd36a8f73a4201ab21a553b5caa5b890b8f1d7213 (patch)
tree65da41c58462ee0c5c587a7c017df7dfbf58a546
parentdaaa958fcc4f829dbd7dac46c39c15f77507495a (diff)
downloadgit-d36a8f73a4201ab21a553b5caa5b890b8f1d7213.tar.gz
git-d36a8f73a4201ab21a553b5caa5b890b8f1d7213.tar.xz
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>
-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 2bac50e14..86faf24cc 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]