Code

invalidate_ref_cache(): take the submodule as parameter
authorMichael Haggerty <mhagger@alum.mit.edu>
Mon, 17 Oct 2011 02:38:06 +0000 (04:38 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 17 Oct 2011 04:09:50 +0000 (21:09 -0700)
Instead of invalidating the ref cache on an all-or-nothing basis,
invalidate the cache for a specific submodule.

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 02b1ef0a8911762702ae1647265283c3ef8a4d53..68b73aa1450f483a3116e045193a879515ecdb84 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -202,13 +202,9 @@ static struct ref_cache *get_ref_cache(const char *submodule)
        return refs;
 }
 
-static void invalidate_ref_cache(void)
+static void invalidate_ref_cache(const char *submodule)
 {
-       struct ref_cache *refs = ref_cache;
-       while (refs) {
-               clear_ref_cache(refs);
-               refs = refs->next;
-       }
+       clear_ref_cache(get_ref_cache(submodule));
 }
 
 static void read_packed_refs(FILE *f, struct ref_array *array)
@@ -1228,7 +1224,7 @@ int delete_ref(const char *refname, const unsigned char *sha1, int delopt)
        ret |= repack_without_ref(refname);
 
        unlink_or_warn(git_path("logs/%s", lock->ref_name));
-       invalidate_ref_cache();
+       invalidate_ref_cache(NULL);
        unlock_ref(lock);
        return ret;
 }
@@ -1527,7 +1523,7 @@ int write_ref_sha1(struct ref_lock *lock,
                unlock_ref(lock);
                return -1;
        }
-       invalidate_ref_cache();
+       invalidate_ref_cache(NULL);
        if (log_ref_write(lock->ref_name, lock->old_sha1, sha1, logmsg) < 0 ||
            (strcmp(lock->ref_name, lock->orig_ref_name) &&
             log_ref_write(lock->orig_ref_name, lock->old_sha1, sha1, logmsg) < 0)) {