This patch series adds some basic api functions to the submodule interface as well as teaching grep to recursively search in submodules. The additions to the submodule interface allow grep to verify that a submodule has been initialized and checked out prior to launching a child process. One issue that still needs to be worked out is when greppig history, you could be in a state where the submodule doesn't have a working tree (or the path you had in the past doesn't match what currently exists) so instead of changing directory into the submdoule you need to look for the .git directory for the submodule in the parents .git/modules directory. If it exists we would need to change directory to .git/modules/<submodule> and then run the child process from there. This currently doesn't work due to commit <10f5c52656> since the GIT_DIR env variable is explicitly set to be '.git'. I'm going to spend some more time thinking about this problem and will address it as an additional patch in the series at a later time. As for the rest of the series, it should be ready for review or comments. Brandon Williams (5): submodules: add helper functions to determine presence of submodules submodules: load gitmodules file from commit sha1 grep: add submodules as a grep source type grep: optionally recurse into submodules grep: enable recurse-submodules to work on <tree> objects Documentation/git-grep.txt | 14 ++ builtin/grep.c | 364 ++++++++++++++++++++++++++++++++++--- cache.h | 2 + config.c | 8 +- git.c | 2 +- grep.c | 16 +- grep.h | 1 + submodule-config.c | 6 +- submodule-config.h | 3 + submodule.c | 51 ++++++ submodule.h | 3 + t/t7814-grep-recurse-submodules.sh | 141 ++++++++++++++ tree-walk.c | 17 +- 13 files changed, 588 insertions(+), 40 deletions(-) create mode 100755 t/t7814-grep-recurse-submodules.sh -- 2.10.1.613.g6021889