diff --git a/src/submodule.c b/src/submodule.c index e1500b847..fdcc2251a 100644 --- a/src/submodule.c +++ b/src/submodule.c @@ -135,6 +135,21 @@ static int submodule_lookup( * PUBLIC APIS */ +bool git_submodule__is_submodule(git_repository *repo, const char *name) +{ + git_strmap *map; + + if (load_submodule_config(repo, false) < 0) { + giterr_clear(); + return false; + } + + if (!(map = repo->submodules)) + return false; + + return git_strmap_valid_index(map, git_strmap_lookup_index(map, name)); +} + int git_submodule_lookup( git_submodule **out, /* NULL if user only wants to test existence */ git_repository *repo, diff --git a/src/submodule.h b/src/submodule.h index 053cb61e0..8199eb1da 100644 --- a/src/submodule.h +++ b/src/submodule.h @@ -119,6 +119,9 @@ enum { #define GIT_SUBMODULE_STATUS__CLEAR_INTERNAL(S) \ ((S) & ~(0xFFFFFFFFu << 20)) +/* Internal submodule check does not attempt to refresh cached data */ +bool git_submodule__is_submodule(git_repository *repo, const char *name); + /* Internal status fn returns status and optionally the various OIDs */ extern int git_submodule__status( unsigned int *out_status,