aboutsummaryrefslogtreecommitdiff
path: root/refs.c
diff options
context:
space:
mode:
authorMichael Haggerty <mhagger@alum.mit.edu>2011-08-13 00:36:28 +0200
committerJunio C Hamano <gitster@pobox.com>2011-08-14 15:18:52 -0700
commitce40979cf83c4c92421f9dd56cc4eabb67c85f29 (patch)
tree4669c23e71a009a0b4470a66930247aab5ed985a /refs.c
parente5dbf6056faecbd9a3c5510f5c5cd73de10374b8 (diff)
downloadgit-ce40979cf83c4c92421f9dd56cc4eabb67c85f29.tar.gz
git-ce40979cf83c4c92421f9dd56cc4eabb67c85f29.tar.xz
Store the submodule name in struct cached_refs
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs.c')
-rw-r--r--refs.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/refs.c b/refs.c
index b325fc71f..6fd351174 100644
--- 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);