diff options
author | Alexander Potashev <aspotashev@gmail.com> | 2009-01-11 15:19:12 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-01-11 13:26:29 -0800 |
commit | 55892d23981917aefdb387ad7d0429f90cbd446a (patch) | |
tree | 72b1aab773fa37b50d07991de8a227994f1d6a7b /builtin-clone.c | |
parent | 8ca12c0d62c0be4a4987c4a936467ea2a92e915a (diff) | |
download | git-55892d23981917aefdb387ad7d0429f90cbd446a.tar.gz |
Allow cloning to an existing empty directory
The die() message updated accordingly.
The previous behaviour was to only allow cloning when the destination
directory doesn't exist.
[jc: added trivial tests]
Signed-off-by: Alexander Potashev <aspotashev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-clone.c')
-rw-r--r-- | builtin-clone.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/builtin-clone.c b/builtin-clone.c index f1a1a0c365..f7e5a7b0a0 100644 --- a/builtin-clone.c +++ b/builtin-clone.c @@ -357,6 +357,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix) struct stat buf; const char *repo_name, *repo, *work_tree, *git_dir; char *path, *dir; + int dest_exists; const struct ref *refs, *head_points_at, *remote_head, *mapped_refs; struct strbuf key = STRBUF_INIT, value = STRBUF_INIT; struct strbuf branch_top = STRBUF_INIT, reflog_msg = STRBUF_INIT; @@ -406,8 +407,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix) dir = guess_dir_name(repo_name, is_bundle, option_bare); strip_trailing_slashes(dir); - if (!stat(dir, &buf)) - die("destination directory '%s' already exists.", dir); + dest_exists = !stat(dir, &buf); + if (dest_exists && !is_empty_dir(dir)) + die("destination path '%s' already exists and is not " + "an empty directory.", dir); strbuf_addf(&reflog_msg, "clone: from %s", repo); @@ -431,7 +434,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix) if (safe_create_leading_directories_const(work_tree) < 0) die("could not create leading directories of '%s': %s", work_tree, strerror(errno)); - if (mkdir(work_tree, 0755)) + if (!dest_exists && mkdir(work_tree, 0755)) die("could not create work tree dir '%s': %s.", work_tree, strerror(errno)); set_git_work_tree(work_tree); |