diff options
author | Matheus Tavares <matheus.bernardino@usp.br> | 2019-07-10 20:59:02 -0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-07-11 13:52:15 -0700 |
commit | 14954b799f0bac76e500593c95d1f274cf0636e5 (patch) | |
tree | 80917c12efa7de0977796d38380f7780fcf99732 | |
parent | clone: copy hidden paths at local clone (diff) | |
download | tgif-14954b799f0bac76e500593c95d1f274cf0636e5.tar.xz |
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>
-rw-r--r-- | builtin/clone.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/builtin/clone.c b/builtin/clone.c index 541f0e1be3..297af3f40e 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -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; |