]> git.ipfire.org Git - thirdparty/git.git/commitdiff
object-file: only register submodule ODB if needed
authorJonathan Tan <jonathantanmy@google.com>
Fri, 8 Oct 2021 21:08:18 +0000 (14:08 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 8 Oct 2021 22:06:06 +0000 (15:06 -0700)
In a35e03dee0 ("submodule: lazily add submodule ODBs as alternates",
2021-09-08), Git was taught to add all known submodule ODBs as
alternates when attempting to read an object that doesn't exist, as a
fallback for when a submodule object is read as if it were in
the_repository. However, this behavior wasn't restricted to happen only
when reading from the_repository. Fix this.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
object-file.c

index be4f94ecf3bc1f86c386ddab7c37f4131c78f8a3..0a1835fe309accc86569239e2d842096741f386e 100644 (file)
@@ -1614,7 +1614,14 @@ static int do_oid_object_info_extended(struct repository *r,
                                break;
                }
 
-               if (register_all_submodule_odb_as_alternates())
+               /*
+                * If r is the_repository, this might be an attempt at
+                * accessing a submodule object as if it were in the_repository
+                * (having called add_submodule_odb() on that submodule's ODB).
+                * If any such ODBs exist, register them and try again.
+                */
+               if (r == the_repository &&
+                   register_all_submodule_odb_as_alternates())
                        /* We added some alternates; retry */
                        continue;