Skip to content

Commit

Permalink
git-gui: Allow 'Create New Repository' on existing directories
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Shawn O. Pearce committed Jan 16, 2008
1 parent daaa958 commit d36a8f7
Showing 1 changed file with 22 additions and 28 deletions.
50 changes: 22 additions & 28 deletions lib/choose_repository.tcl
Original file line number Diff line number Diff line change
@@ -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]

0 comments on commit d36a8f7

Please sign in to comment.