As before you can find this series at: https://github.com/bmwill/git/tree/repository-object Changes in v4: * Patch 11 is slightly different and turns off all path relocation when a worktree is provided instead of just for the index file (Thanks for the help Jonathan Nieder). * 'repo_init()' has a tighter API and now requires that the provided gitdir is a path to the gitdir instead of either a path to the gitdir or path to the worktree (which has a .git file or directory) (Thanks Jonathan Tan). * Minor comment and commit message chagnes Note: Like v3 this series is dependent on on 'bw/config-h' and 'bw/ls-files-sans-the-index' Brandon Williams (20): setup: don't perform lazy initialization of repository state setup: add comment indicating a hack environment: remove namespace_len variable repository: introduce the repository object environment: place key repository state in the_repository environment: store worktree in the_repository path: create path.h path: always pass in commondir to update_common_dir path: convert strbuf_git_common_path to take a 'struct repository' path: convert do_git_path to take a 'struct repository' path: worktree_git_path() should not use file relocation path: add repo_git_path and strbuf_repo_git_path path: add repo_worktree_path and strbuf_repo_worktree_path config: read config from a repository object repository: add index_state to struct repo submodule-config: store the_submodule_cache in the_repository submodule: add repo_read_gitmodules submodule: convert is_submodule_initialized to work on a repository repository: enable initialization of submodules ls-files: use repository object Makefile | 1 + builtin/grep.c | 3 +- builtin/ls-files.c | 192 +++++++++++--------------- builtin/submodule--helper.c | 9 +- cache.h | 62 +-------- config.c | 216 +++++++++++++++++++---------- config.h | 24 ++++ environment.c | 91 ++++--------- git.c | 2 +- path.c | 130 ++++++++++++++---- path.h | 82 +++++++++++ repository.c | 242 +++++++++++++++++++++++++++++++++ repository.h | 97 +++++++++++++ setup.c | 33 +++++ submodule-config.c | 70 +++++++--- submodule-config.h | 10 ++ submodule.c | 35 +++-- submodule.h | 4 +- t/t3007-ls-files-recurse-submodules.sh | 39 ++++++ worktree.c | 3 +- 20 files changed, 972 insertions(+), 373 deletions(-) create mode 100644 path.h create mode 100644 repository.c create mode 100644 repository.h -- 2.13.1.704.gde00cce3c-goog