aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Tan <jonathantanmy@google.com>2021-08-16 14:09:52 -0700
committerJunio C Hamano <gitster@pobox.com>2021-09-08 11:47:49 -0700
commit8d33c3af0b2113091ea2c2c94990d0332c9551e7 (patch)
tree5bffcf5ca31a4cdedb6bb0c562d4ed16600ed24e
parenta35e03dee0e8daa442227018ecd180ae1c1b39bc (diff)
downloadgit-8d33c3af0b2113091ea2c2c94990d0332c9551e7.tar.gz
grep: use submodule-ODB-as-alternate lazy-addition
In the parent commit, Git was taught to add submodule ODBs as alternates lazily, but grep does not use this because it computes the path to add directly, not going through add_submodule_odb(). Add an equivalent to add_submodule_odb() that takes the exact ODB path and teach grep to use it. Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Reviewed-by: Emily Shaffer <emilyshaffer@google.com> Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/grep.c2
-rw-r--r--submodule.c5
-rw-r--r--submodule.h1
3 files changed, 7 insertions, 1 deletions
diff --git a/builtin/grep.c b/builtin/grep.c
index 7d2f8e5adb..87bcb934a2 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -450,7 +450,7 @@ static int grep_submodule(struct grep_opt *opt,
* store is no longer global and instead is a member of the repository
* object.
*/
- add_to_alternates_memory(subrepo.objects->odb->path);
+ add_submodule_odb_by_path(subrepo.objects->odb->path);
obj_read_unlock();
memcpy(&subopt, opt, sizeof(subopt));
diff --git a/submodule.c b/submodule.c
index 8fde90e906..8de1aecaeb 100644
--- a/submodule.c
+++ b/submodule.c
@@ -187,6 +187,11 @@ done:
return ret;
}
+void add_submodule_odb_by_path(const char *path)
+{
+ string_list_insert(&added_submodule_odb_paths, xstrdup(path));
+}
+
int register_all_submodule_odb_as_alternates(void)
{
int i;
diff --git a/submodule.h b/submodule.h
index c252784bc2..17a06cc43b 100644
--- a/submodule.h
+++ b/submodule.h
@@ -104,6 +104,7 @@ int bad_to_remove_submodule(const char *path, unsigned flags);
* the_repository.
*/
int add_submodule_odb(const char *path);
+void add_submodule_odb_by_path(const char *path);
int register_all_submodule_odb_as_alternates(void);
/*