Code

Store the submodule name in struct cached_refs
authorMichael Haggerty <mhagger@alum.mit.edu>
Fri, 12 Aug 2011 22:36:28 +0000 (00:36 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 14 Aug 2011 22:18:52 +0000 (15:18 -0700)
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c

diff --git a/refs.c b/refs.c
index b325fc71fe473437e84513a91dd2eb7b057cdc6f..6fd351174ae55a521f4fd9153d522cf4040e016c 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -157,6 +157,8 @@ static struct cached_refs {
        char did_packed;
        struct ref_list *loose;
        struct ref_list *packed;
+       /* The submodule name, or "" for the main repo. */
+       char name[FLEX_ARRAY];
 } *cached_refs, *submodule_refs;
 static struct ref_list *current_ref;
 
@@ -181,12 +183,17 @@ static void clear_cached_refs(struct cached_refs *ca)
        ca->did_loose = ca->did_packed = 0;
 }
 
-struct cached_refs *create_cached_refs(void)
+struct cached_refs *create_cached_refs(const char *submodule)
 {
+       int len;
        struct cached_refs *refs;
-       refs = xmalloc(sizeof(struct cached_refs));
+       if (!submodule)
+               submodule = "";
+       len = strlen(submodule) + 1;
+       refs = xmalloc(sizeof(struct cached_refs) + len);
        refs->did_loose = refs->did_packed = 0;
        refs->loose = refs->packed = NULL;
+       memcpy(refs->name, submodule, len);
        return refs;
 }
 
@@ -200,11 +207,11 @@ static struct cached_refs *get_cached_refs(const char *submodule)
 {
        if (!submodule) {
                if (!cached_refs)
-                       cached_refs = create_cached_refs();
+                       cached_refs = create_cached_refs(submodule);
                return cached_refs;
        } else {
                if (!submodule_refs)
-                       submodule_refs = create_cached_refs();
+                       submodule_refs = create_cached_refs(submodule);
                else
                        /* For now, don't reuse the refs cache for submodules. */
                        clear_cached_refs(submodule_refs);