summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2017-11-03 12:58:02 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-11-03 14:02:25 (GMT)
commitfa4d8c783d780191d98fe1f68ad2dea2fe78d19c (patch)
treecb763d9b256516973511c149fffeb468502c62cf
parent5c4003ca3f0e9ac6d3c8aa3e387ff843bd440411 (diff)
downloadgit-fa4d8c783d780191d98fe1f68ad2dea2fe78d19c.zip
git-fa4d8c783d780191d98fe1f68ad2dea2fe78d19c.tar.gz
git-fa4d8c783d780191d98fe1f68ad2dea2fe78d19c.tar.bz2
setup: avoid double slashes when looking for HEAD
Andrew Baumann reported that when called outside of any Git worktree, `git rev-parse --is-inside-work-tree` eventually tries to access `//HEAD`, i.e. any `HEAD` file in the root directory, but with a double slash. This double slash is not only unintentional, but is allowed by the POSIX standard to have a special meaning. And most notably on Windows, it does, where it refers to a UNC path of the form `//server/share/`. As a consequence, afore-mentioned `rev-parse` call not only looks for the wrong thing, but it also causes serious delays, as Windows will try to access a server called `HEAD`. Let's simply avoid the unintended double slash. Signed-off-by: Jeff King <peff@peff.net> Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--setup.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/setup.c b/setup.c
index 98b8dee..6004107 100644
--- a/setup.c
+++ b/setup.c
@@ -283,7 +283,9 @@ int is_git_directory(const char *suspect)
size_t len;
/* Check worktree-related signatures */
- strbuf_addf(&path, "%s/HEAD", suspect);
+ strbuf_addstr(&path, suspect);
+ strbuf_complete(&path, '/');
+ strbuf_addstr(&path, "HEAD");
if (validate_headref(path.buf))
goto done;