From: Jeff King <peff@peff.net>
To: "Robert P. J. Day" <rpjday@crashcourse.ca>
Cc: Stephan Janssen <sjanssen@you-get.com>,
"git@vger.kernel.org" <git@vger.kernel.org>
Subject: [PATCH 3/4] clone: factor out dir_exists() helper
Date: Tue, 2 Jan 2018 16:10:14 -0500 [thread overview]
Message-ID: <20180102211014.GC22556@sigill.intra.peff.net> (raw)
In-Reply-To: <20180102210753.GA10430@sigill.intra.peff.net>
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>
---
builtin/clone.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/builtin/clone.c b/builtin/clone.c
index 2da71db107..04b0d7283f 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -863,10 +863,15 @@ static void dissociate_from_references(void)
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 is_bundle = 0, is_local;
- struct stat buf;
const char *repo_name, *repo, *work_tree, *git_dir;
char *path, *dir;
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);
strip_trailing_slashes(dir);
- dest_exists = !stat(dir, &buf);
+ dest_exists = dir_exists(dir);
if (dest_exists && !is_empty_dir(dir))
die(_("destination path '%s' already exists and is not "
"an empty directory."), dir);
@@ -949,7 +954,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
work_tree = NULL;
else {
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);
}
--
2.16.0.rc0.384.gc477e89267
next prev parent reply other threads:[~2018-01-02 21:10 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-02 11:10 Git removes existing folder when cancelling clone Stephan Janssen
2018-01-02 11:12 ` Robert P. J. Day
2018-01-02 20:04 ` Jeff King
2018-01-02 21:07 ` [PATCH 0/4] " Jeff King
2018-01-02 21:08 ` [PATCH 1/4] t5600: fix outdated comment about unborn HEAD Jeff King
2018-01-02 21:09 ` [PATCH 2/4] t5600: modernize style Jeff King
2018-01-02 21:10 ` Jeff King [this message]
2018-01-04 23:47 ` [PATCH 3/4] clone: factor out dir_exists() helper Junio C Hamano
2018-01-04 23:54 ` Jeff King
2018-01-05 0:22 ` Jeff King
2018-01-05 19:19 ` Junio C Hamano
2018-01-02 21:11 ` [PATCH 4/4] clone: do not clean up directories we didn't create Jeff King
2018-01-02 22:49 ` Eric Sunshine
2018-01-02 23:39 ` Jeff King
2018-01-05 18:50 ` Junio C Hamano
2018-01-04 23:48 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180102211014.GC22556@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=rpjday@crashcourse.ca \
--cc=sjanssen@you-get.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).