git_repository_open_ext: fix handling of $GIT_NAMESPACE

The existing code would set a namespace of "" (empty string) with
GIT_NAMESPACE unset.  In a repository where refs/heads/namespaces/
exists, that can produce incorrect results.  Detect that case and avoid
setting the namespace at all.

Since that makes the last assignment to error conditional, and the
previous assignment can potentially get GIT_ENOTFOUND, set error to 0
explicitly to prevent the call from incorrectly failing with
GIT_ENOTFOUND.
This commit is contained in:
Josh Triplett 2016-11-10 03:51:12 -08:00
parent 5fe5557e8a
commit c9e967a1b4

View File

@ -613,9 +613,10 @@ static int _git_repository_open_ext_from_env(
git_repository_set_odb(repo, odb); git_repository_set_odb(repo, odb);
error = git__getenv(&alts_buf, "GIT_ALTERNATE_OBJECT_DIRECTORIES"); error = git__getenv(&alts_buf, "GIT_ALTERNATE_OBJECT_DIRECTORIES");
if (error == GIT_ENOTFOUND) if (error == GIT_ENOTFOUND) {
giterr_clear(); giterr_clear();
else if (error < 0) error = 0;
} else if (error < 0)
goto error; goto error;
else { else {
const char *end; const char *end;
@ -638,9 +639,11 @@ static int _git_repository_open_ext_from_env(
} }
} }
error = git_repository_set_namespace(repo, git_buf_cstr(&namespace_buf)); if (git_buf_len(&namespace_buf)) {
if (error < 0) error = git_repository_set_namespace(repo, git_buf_cstr(&namespace_buf));
goto error; if (error < 0)
goto error;
}
git_repository_set_index(repo, index); git_repository_set_index(repo, index);