object-file: only register submodule ODB if needed

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>

Jonathan Tan committed Oct 8, 2021 at 14:08 UTC eef71904ff68e90f2db37aa9e25fe82c3fccf2a0
1 file changed +8 -1
object-file.c
+8 -1
@@ -1614,7 +1614,14 @@ static int do_oid_object_info_extended(struct repository *r,
1614 break;
1615 }
1616
1617 - if (register_all_submodule_odb_as_alternates())
1617 + /*
1618 + * If r is the_repository, this might be an attempt at
1619 + * accessing a submodule object as if it were in the_repository
1620 + * (having called add_submodule_odb() on that submodule's ODB).
1621 + * If any such ODBs exist, register them and try again.
1622 + */
1623 + if (r == the_repository &&
1624 + register_all_submodule_odb_as_alternates())
1625 /* We added some alternates; retry */
1626 continue;
1627