Attempts to access gitdir are everywhere, even before cmd_*() is called. Because repository has not been found, repository-specific information (i.e. $GIT_DIR/config) may not be read. This leads to obscure bugs. So the sooner we setup gitdir, the less trouble we may have to deal with. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- cache.h | 1 + git.c | 11 ++++++++--- setup.c | 4 +++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cache.h b/cache.h index 8d8f8ee..fa13bf7 100644 --- a/cache.h +++ b/cache.h @@ -1064,6 +1064,7 @@ int checkout_fast_forward(const unsigned char *from, const unsigned char *to); /* git.c */ struct startup_info { const char *prefix; + int have_repository; }; extern struct startup_info *startup_info; diff --git a/git.c b/git.c index 4be34e4..9e0e2d0 100644 --- a/git.c +++ b/git.c @@ -220,13 +220,14 @@ static int handle_alias(int *argcp, const char ***argv) const char git_version_string[] = GIT_VERSION; -#define RUN_SETUP (1<<0) -#define USE_PAGER (1<<1) +#define RUN_SETUP (1<<0) +#define USE_PAGER (1<<1) /* * require working tree to be present -- anything uses this needs * RUN_SETUP for reading from the configuration file. */ -#define NEED_WORK_TREE (1<<2) +#define NEED_WORK_TREE (1<<2) +#define RUN_SETUP_GENTLY (1<<3) struct cmd_struct { const char *cmd; @@ -245,6 +246,10 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv) if (!help) { if (p->option & RUN_SETUP) setup_git_directory(); + if (p->option & RUN_SETUP_GENTLY) { + int nongit_ok; + setup_git_directory_gently(&nongit_ok); + } if (use_pager == -1 && p->option & RUN_SETUP) use_pager = check_pager_config(p->cmd); diff --git a/setup.c b/setup.c index cf1b37d..bb3648c 100644 --- a/setup.c +++ b/setup.c @@ -448,8 +448,10 @@ const char *setup_git_directory_gently(int *nongit_ok) const char *prefix; prefix = setup_git_directory_gently_1(nongit_ok); - if (startup_info) + if (startup_info) { startup_info->prefix = prefix; + startup_info->have_repository = !nongit_ok || !*nongit_ok; + } return prefix; } -- 1.7.0.rc1.541.g2da82.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html