clone: factor out dir_exists() helper
Two parts of git-clone's setup logic check whether a directory exists, and they both call stat directly with the same scratch "struct stat" buffer. Let's pull that into a helper, which has a few advantages: - it makes the purpose of the stat calls more obvious - it makes it clear that we don't care about the information in "buf" remaining valid - if we later decide to make the check more robust (e.g., complaining about non-directories), we can do it in one place Note that we could just use file_exists() for this, which has identical code. But we specifically care about directories, so this future-proofs us against that function later getting more picky about seeing actual files. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
8486b84f0e
commit
f9e377adc0
@ -863,10 +863,15 @@ static void dissociate_from_references(void)
|
|||||||
free(alternates);
|
free(alternates);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dir_exists(const char *path)
|
||||||
|
{
|
||||||
|
struct stat sb;
|
||||||
|
return !stat(path, &sb);
|
||||||
|
}
|
||||||
|
|
||||||
int cmd_clone(int argc, const char **argv, const char *prefix)
|
int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
int is_bundle = 0, is_local;
|
int is_bundle = 0, is_local;
|
||||||
struct stat buf;
|
|
||||||
const char *repo_name, *repo, *work_tree, *git_dir;
|
const char *repo_name, *repo, *work_tree, *git_dir;
|
||||||
char *path, *dir;
|
char *path, *dir;
|
||||||
int dest_exists;
|
int dest_exists;
|
||||||
@ -938,7 +943,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
|||||||
dir = guess_dir_name(repo_name, is_bundle, option_bare);
|
dir = guess_dir_name(repo_name, is_bundle, option_bare);
|
||||||
strip_trailing_slashes(dir);
|
strip_trailing_slashes(dir);
|
||||||
|
|
||||||
dest_exists = !stat(dir, &buf);
|
dest_exists = dir_exists(dir);
|
||||||
if (dest_exists && !is_empty_dir(dir))
|
if (dest_exists && !is_empty_dir(dir))
|
||||||
die(_("destination path '%s' already exists and is not "
|
die(_("destination path '%s' already exists and is not "
|
||||||
"an empty directory."), dir);
|
"an empty directory."), dir);
|
||||||
@ -949,7 +954,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
|||||||
work_tree = NULL;
|
work_tree = NULL;
|
||||||
else {
|
else {
|
||||||
work_tree = getenv("GIT_WORK_TREE");
|
work_tree = getenv("GIT_WORK_TREE");
|
||||||
if (work_tree && !stat(work_tree, &buf))
|
if (work_tree && dir_exists(work_tree))
|
||||||
die(_("working tree '%s' already exists."), work_tree);
|
die(_("working tree '%s' already exists."), work_tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user