Commit 945c92a5cf1f73d56d0d2f06776f3181ed5b5548

Russell Belfer 2014-03-31T12:26:46

Add faster git_submodule__is_submodule check

diff --git a/src/submodule.c b/src/submodule.c
index e1500b8..fdcc225 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 053cb61..8199eb1 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,