summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2014-03-31 12:26:46 -0700
committerRussell Belfer <rb@github.com>2014-03-31 12:40:58 -0700
commit945c92a5cf1f73d56d0d2f06776f3181ed5b5548 (patch)
tree3b97f59223560a9a9226229a6c391ba691352ba2
parentfad04120275925257a93312a3e05af64e9d17090 (diff)
downloadlibgit2-945c92a5cf1f73d56d0d2f06776f3181ed5b5548.tar.gz
Add faster git_submodule__is_submodule check
-rw-r--r--src/submodule.c15
-rw-r--r--src/submodule.h3
2 files changed, 18 insertions, 0 deletions
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,