While the first part is more of preventing faults. This part fixes the remaining faults (or introduces more faults, who knows). I think I have got it to a readable/testable state. On top of nd/setup, obviously. Nguyễn Thái Ngọc Duy (16): Move enter_repo() to setup.c enter_repo(): initialize other variables as setup_git_directory_gently() does rev-parse --git-dir: print relative gitdir correctly worktree setup: call set_git_dir explicitly Add git_config_early() Preparation Use git_config_early() instead of git_config() during repo setup worktree setup: restore original state when things go wrong init/clone: turn on startup->have_repository properly Improve setup stuff git_config(): do not read .git/config if there is no repository Do not read .git/info/exclude if there is no repository Do not read .git/info/attributes if there is no repository apply: do not check sha1 when repository has not been found config: do not read .git/config if there is no repository Stop improper access to repo (and incorrectly set git_dir along the way) Allow to undo setup_git_directory_gently() gracefully (and fix alias code) alias: keep repository found while collecting aliases as long as possible Alias fix/improvement. I think I can add some tests for this. Guard unallowed access to repository when it's not set up The original patch [1] that has grown up to a 37-patch, 2-part series [1] http://mid.gmane.org/1265370468-6147-1-git-send-email-pclouds@xxxxxxxxx attr.c | 5 +- builtin/apply.c | 2 +- builtin/clone.c | 3 +- builtin/config.c | 9 ++- builtin/init-db.c | 10 ++- builtin/rev-parse.c | 8 ++ cache.h | 6 ++- config.c | 22 +++++-- dir.c | 8 ++- environment.c | 33 ++++++++- git.c | 22 ++++--- path.c | 91 ----------------------- setup.c | 184 ++++++++++++++++++++++++++++++++++++++++++++--- t/t1300-repo-config.sh | 14 ++++ t/t1302-repo-version.sh | 2 +- t/t7002-grep.sh | 24 ++++++ 16 files changed, 309 insertions(+), 134 deletions(-) -- 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