clone: extract function from copy_or_link_directory
Extract dir creation code snippet from copy_or_link_directory to its own function named mkdir_if_missing. This change will help to remove copy_or_link_directory's explicit recursion, which will be done in a following patch. Also makes the code more readable. Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
68c7c59cf2
commit
14954b799f
@ -391,6 +391,21 @@ static void copy_alternates(struct strbuf *src, const char *src_repo)
|
||||
fclose(in);
|
||||
}
|
||||
|
||||
static void mkdir_if_missing(const char *pathname, mode_t mode)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (!mkdir(pathname, mode))
|
||||
return;
|
||||
|
||||
if (errno != EEXIST)
|
||||
die_errno(_("failed to create directory '%s'"), pathname);
|
||||
else if (stat(pathname, &st))
|
||||
die_errno(_("failed to stat '%s'"), pathname);
|
||||
else if (!S_ISDIR(st.st_mode))
|
||||
die(_("%s exists and is not a directory"), pathname);
|
||||
}
|
||||
|
||||
static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest,
|
||||
const char *src_repo, int src_baselen)
|
||||
{
|
||||
@ -403,14 +418,7 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest,
|
||||
if (!dir)
|
||||
die_errno(_("failed to open '%s'"), src->buf);
|
||||
|
||||
if (mkdir(dest->buf, 0777)) {
|
||||
if (errno != EEXIST)
|
||||
die_errno(_("failed to create directory '%s'"), dest->buf);
|
||||
else if (stat(dest->buf, &buf))
|
||||
die_errno(_("failed to stat '%s'"), dest->buf);
|
||||
else if (!S_ISDIR(buf.st_mode))
|
||||
die(_("%s exists and is not a directory"), dest->buf);
|
||||
}
|
||||
mkdir_if_missing(dest->buf, 0777);
|
||||
|
||||
strbuf_addch(src, '/');
|
||||
src_len = src->len;
|
||||
|
Loading…
Reference in New Issue
Block a user