mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-11 04:28:26 +00:00
Skip submodule head/index update when caching.
`git_submodule_status` is very slow, bottlenecked on `git_repository_head_tree`, which it uses through `submodule_update_head`. If the user has requested submodule caching, assume that they want this status cached too and skip it. Signed-off-by: David Turner <dturner@twosigma.com>
This commit is contained in:
parent
4d99c4cfc6
commit
673dff88a2
@ -1544,13 +1544,22 @@ int git_submodule__status(
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* refresh the index OID */
|
||||
if (submodule_update_index(sm) < 0)
|
||||
return -1;
|
||||
/* If the user has requested caching submodule state, performing these
|
||||
* expensive operations (especially `submodule_update_head`, which is
|
||||
* bottlenecked on `git_repository_head_tree`) eliminates much of the
|
||||
* advantage. We will, therefore, interpret the request for caching to
|
||||
* apply here to and skip them.
|
||||
*/
|
||||
|
||||
/* refresh the HEAD OID */
|
||||
if (submodule_update_head(sm) < 0)
|
||||
return -1;
|
||||
if (sm->repo->submodule_cache == NULL) {
|
||||
/* refresh the index OID */
|
||||
if (submodule_update_index(sm) < 0)
|
||||
return -1;
|
||||
|
||||
/* refresh the HEAD OID */
|
||||
if (submodule_update_head(sm) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* for ignore == dirty, don't scan the working directory */
|
||||
if (ign == GIT_SUBMODULE_IGNORE_DIRTY) {
|
||||
|
Loading…
Reference in New Issue
Block a user