summaryrefslogtreecommitdiff
path: root/builtin/grep.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2018-11-13 13:37:22 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-11-13 13:37:22 (GMT)
commitabb4824d13a44f68d1bbaf6726945983230771f9 (patch)
tree316449048983aa8a4503af46cd450199a69b1078 /builtin/grep.c
parent504bdc59948831ebccafb1be9f90bb58c02303eb (diff)
parent2b1257e463fe97b3f657bbf30fafdea0c4847cd7 (diff)
downloadgit-abb4824d13a44f68d1bbaf6726945983230771f9.zip
git-abb4824d13a44f68d1bbaf6726945983230771f9.tar.gz
git-abb4824d13a44f68d1bbaf6726945983230771f9.tar.bz2
Merge branch 'ao/submodule-wo-gitmodules-checked-out'
The submodule support has been updated to read from the blob at HEAD:.gitmodules when the .gitmodules file is missing from the working tree. * ao/submodule-wo-gitmodules-checked-out: t/helper: add test-submodule-nested-repo-config submodule: support reading .gitmodules when it's not in the working tree submodule: add a helper to check if it is safe to write to .gitmodules t7506: clean up .gitmodules properly before setting up new scenario submodule: use the 'submodule--helper config' command submodule--helper: add a new 'config' subcommand t7411: be nicer to future tests and really clean things up t7411: merge tests 5 and 6 submodule: factor out a config_set_in_gitmodules_file_gently function submodule: add a print_config_from_gitmodules() helper
Diffstat (limited to 'builtin/grep.c')
-rw-r--r--builtin/grep.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/builtin/grep.c b/builtin/grep.c
index d8508dd..56e4a11 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -422,11 +422,23 @@ static int grep_submodule(struct grep_opt *opt, struct repository *superproject,
struct repository submodule;
int hit;
- if (!is_submodule_active(superproject, path))
+ /*
+ * NEEDSWORK: submodules functions need to be protected because they
+ * access the object store via config_from_gitmodules(): the latter
+ * uses get_oid() which, for now, relies on the global the_repository
+ * object.
+ */
+ grep_read_lock();
+
+ if (!is_submodule_active(superproject, path)) {
+ grep_read_unlock();
return 0;
+ }
- if (repo_submodule_init(&submodule, superproject, path))
+ if (repo_submodule_init(&submodule, superproject, path)) {
+ grep_read_unlock();
return 0;
+ }
repo_read_gitmodules(&submodule);
@@ -440,7 +452,6 @@ static int grep_submodule(struct grep_opt *opt, struct repository *superproject,
* store is no longer global and instead is a member of the repository
* object.
*/
- grep_read_lock();
add_to_alternates_memory(submodule.objects->objectdir);
grep_read_unlock();