aboutsummaryrefslogtreecommitdiffstats
path: root/setup.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-06-24 14:28:40 -0700
committerJunio C Hamano <gitster@pobox.com>2017-06-24 14:28:41 -0700
commitf31d23a399d557d687266b4375a0436f920cc051 (patch)
tree4f163d684ab6b66476e8795a7ea4fce4f2aa5037 /setup.c
parentMerge branch 'bw/ls-files-sans-the-index' (diff)
parentconfig: don't implicitly use gitdir or commondir (diff)
downloadgit-f31d23a399d557d687266b4375a0436f920cc051.tar.gz
git-f31d23a399d557d687266b4375a0436f920cc051.zip
Merge branch 'bw/config-h'
Fix configuration codepath to pay proper attention to commondir that is used in multi-worktree situation, and isolate config API into its own header file. * bw/config-h: config: don't implicitly use gitdir or commondir config: respect commondir setup: teach discover_git_directory to respect the commondir config: don't include config.h by default config: remove git_config_iter config: create config.h
Diffstat (limited to 'setup.c')
-rw-r--r--setup.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/setup.c b/setup.c
index ae3e0ddda2..358fbc2e53 100644
--- a/setup.c
+++ b/setup.c
@@ -1,4 +1,5 @@
#include "cache.h"
+#include "config.h"
#include "dir.h"
#include "string-list.h"
@@ -967,19 +968,21 @@ static enum discovery_result setup_git_directory_gently_1(struct strbuf *dir,
}
}
-const char *discover_git_directory(struct strbuf *gitdir)
+int discover_git_directory(struct strbuf *commondir,
+ struct strbuf *gitdir)
{
struct strbuf dir = STRBUF_INIT, err = STRBUF_INIT;
size_t gitdir_offset = gitdir->len, cwd_len;
+ size_t commondir_offset = commondir->len;
struct repository_format candidate;
if (strbuf_getcwd(&dir))
- return NULL;
+ return -1;
cwd_len = dir.len;
if (setup_git_directory_gently_1(&dir, gitdir, 0) <= 0) {
strbuf_release(&dir);
- return NULL;
+ return -1;
}
/*
@@ -995,8 +998,10 @@ const char *discover_git_directory(struct strbuf *gitdir)
strbuf_insert(gitdir, gitdir_offset, dir.buf, dir.len);
}
+ get_common_dir(commondir, gitdir->buf + gitdir_offset);
+
strbuf_reset(&dir);
- strbuf_addf(&dir, "%s/config", gitdir->buf + gitdir_offset);
+ strbuf_addf(&dir, "%s/config", commondir->buf + commondir_offset);
read_repository_format(&candidate, dir.buf);
strbuf_release(&dir);
@@ -1004,11 +1009,12 @@ const char *discover_git_directory(struct strbuf *gitdir)
warning("ignoring git dir '%s': %s",
gitdir->buf + gitdir_offset, err.buf);
strbuf_release(&err);
+ strbuf_setlen(commondir, commondir_offset);
strbuf_setlen(gitdir, gitdir_offset);
- return NULL;
+ return -1;
}
- return gitdir->buf + gitdir_offset;
+ return 0;
}
const char *setup_git_directory_gently(int *nongit_ok)