I decided to split up the original series into three parts in order to make review a little bit easier. As such this series is dependent on on 'bw/config-h' and 'bw/ls-files-sans-the-index' which should be moving into 'next' soon. Due to this I was able to greatly shrink this series in terms of number of patches so hopefully it is a little easier to review. As before you can find this series at: https://github.com/bmwill/git/tree/repository-object Chagnes in v3: * Once v2 was merged to 'pu' a bug was discovered in how the 'do_git_path' function handled worktree's. v3 addresses this by ensuring to only replace 'gitdir/index' with 'repository->index_file' when not operating specifically on a 'struct worktree'. * Added a bunch of path related functions to facilitate construction of paths into a repository's gitdir or in a repository's worktree. * Added an additional initialization function to allow initializing a 'struct repository' as a submodule of another 'struct repository'. 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: construct correct path to a worktree's index 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 | 195 +++++++++++--------------- builtin/submodule--helper.c | 9 +- cache.h | 62 +-------- config.c | 216 +++++++++++++++++++---------- config.h | 24 ++++ environment.c | 91 ++++-------- git.c | 2 +- path.c | 136 ++++++++++++++---- path.h | 82 +++++++++++ repository.c | 245 +++++++++++++++++++++++++++++++++ repository.h | 76 ++++++++++ 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, 962 insertions(+), 374 deletions(-) create mode 100644 path.h create mode 100644 repository.c create mode 100644 repository.h -- 2.13.1.611.g7e3b11ae1-goog