{"thread":{"id":"28699","subject":"[PATCH v4 1/7] invalidate_ref_cache(): rename function from invalidate_cached_refs()","startedAt":"2011-10-17T02:38:04Z","lastAt":"2011-10-17T19:43:19Z","messageCount":11,"participants":["mhagger@alum.mit.edu","Junio C Hamano","Heiko Voigt","Michael Haggerty"],"isPatch":true,"patchVersion":4,"patchTotal":7},"messages":[{"id":"177824","messageId":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","threadId":"28699","inReplyTo":null,"subject":"[PATCH v4 0/7] Provide API to invalidate refs cache","fromName":"","fromEmail":"mhagger@alum.mit.edu","sentAt":"2011-10-17T02:38:04Z","receivedAt":"2011-10-17T02:38:04Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nThese patches are re-rolled onto the current master and incorporate\nJunio's suggestion to rename \"struct cached_refs\" to \"ref_cache\".\n\nThis patch series provides an API for external code to invalidate the\nref cache that is used internally to refs.c.  It also allows code\n*within* refs.c to invalidate only the packed or only the loose refs\nfor a module/submodule.\n\nIMPORTANT:\n\nI won't myself have time to figure out who, outside of refs.c, has to\n*call* invalidate_ref_cache().  The candidates that I know off the top\nof my head are git-clone, git-submodule [1], and git-pack-refs.  It\nwould be great if experts in those areas would insert calls to\ninvalidate_ref_cache() where needed.\n\nEven better would be if the meddlesome code were changed to use the\nrefs API.  I'd be happy to help expanding the refs API if needed to\naccommodate your needs.\n\nThis is why the API for invalidating only packed or loose refs is\nprivate.  After code outside refs.c is changed to use the refs API, it\nwill get the optimal behavior for free (and at that time\ninvalidate_ref_cache() can be removed again).\n\n[1] http://marc.info/?l=git&m=131827641227965&w=2\n    In this mailing list thread, Heiko Voigt stated that git-submodule\n    does not modify any references, so it should not have to use the\n    API.\n\nMichael Haggerty (7):\n  invalidate_ref_cache(): rename function from invalidate_cached_refs()\n  invalidate_ref_cache(): take the submodule as parameter\n  invalidate_ref_cache(): expose this function in the refs API\n  clear_ref_cache(): rename parameter\n  clear_ref_cache(): extract two new functions\n  write_ref_sha1(): only invalidate the loose ref cache\n  clear_ref_cache(): inline function\n\n refs.c |   59 +++++++++++++++++++++++++++++++----------------------------\n refs.h |    8 ++++++++\n 2 files changed, 39 insertions(+), 28 deletions(-)\n\n-- \n1.7.7.rc2\n"},{"id":"177820","messageId":"1318819091-7066-2-git-send-email-mhagger@alum.mit.edu","threadId":"28699","inReplyTo":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","subject":"[PATCH v4 1/7] invalidate_ref_cache(): rename function from invalidate_cached_refs()","fromName":"","fromEmail":"mhagger@alum.mit.edu","sentAt":"2011-10-17T02:38:05Z","receivedAt":"2011-10-17T02:38:05Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nIt is the cache that is being invalidated, not the references, and the\nnew name makes this unambiguous.  Rename other items analogously:\n\n* struct cached_refs -> struct ref_cache\n* cached_refs (the variable) -> ref_cache\n* clear_cached_refs() -> clear_ref_cache()\n* create_cached_refs() -> create_ref_cache()\n* get_cached_refs() -> get_ref_cache()\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\n---\n refs.c |   40 ++++++++++++++++++++--------------------\n 1 files changed, 20 insertions(+), 20 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex 9911c97..02b1ef0 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -134,15 +134,15 @@ static struct ref_entry *search_ref_array(struct ref_array *array, const char *n\n  * Future: need to be in \"struct repository\"\n  * when doing a full libification.\n  */\n-static struct cached_refs {\n-\tstruct cached_refs *next;\n+static struct ref_cache {\n+\tstruct ref_cache *next;\n \tchar did_loose;\n \tchar did_packed;\n \tstruct ref_array loose;\n \tstruct ref_array packed;\n \t/* The submodule name, or \"\" for the main repo. */\n \tchar name[FLEX_ARRAY];\n-} *cached_refs;\n+} *ref_cache;\n \n static struct ref_entry *current_ref;\n \n@@ -158,7 +158,7 @@ static void free_ref_array(struct ref_array *array)\n \tarray->refs = NULL;\n }\n \n-static void clear_cached_refs(struct cached_refs *ca)\n+static void clear_ref_cache(struct ref_cache *ca)\n {\n \tif (ca->did_loose)\n \t\tfree_ref_array(&ca->loose);\n@@ -167,27 +167,27 @@ static void clear_cached_refs(struct cached_refs *ca)\n \tca->did_loose = ca->did_packed = 0;\n }\n \n-static struct cached_refs *create_cached_refs(const char *submodule)\n+static struct ref_cache *create_ref_cache(const char *submodule)\n {\n \tint len;\n-\tstruct cached_refs *refs;\n+\tstruct ref_cache *refs;\n \tif (!submodule)\n \t\tsubmodule = \"\";\n \tlen = strlen(submodule) + 1;\n-\trefs = xcalloc(1, sizeof(struct cached_refs) + len);\n+\trefs = xcalloc(1, sizeof(struct ref_cache) + len);\n \tmemcpy(refs->name, submodule, len);\n \treturn refs;\n }\n \n /*\n- * Return a pointer to a cached_refs for the specified submodule. For\n+ * Return a pointer to a ref_cache for the specified submodule. For\n  * the main repository, use submodule==NULL. The returned structure\n  * will be allocated and initialized but not necessarily populated; it\n  * should not be freed.\n  */\n-static struct cached_refs *get_cached_refs(const char *submodule)\n+static struct ref_cache *get_ref_cache(const char *submodule)\n {\n-\tstruct cached_refs *refs = cached_refs;\n+\tstruct ref_cache *refs = ref_cache;\n \tif (!submodule)\n \t\tsubmodule = \"\";\n \twhile (refs) {\n@@ -196,17 +196,17 @@ static struct cached_refs *get_cached_refs(const char *submodule)\n \t\trefs = refs->next;\n \t}\n \n-\trefs = create_cached_refs(submodule);\n-\trefs->next = cached_refs;\n-\tcached_refs = refs;\n+\trefs = create_ref_cache(submodule);\n+\trefs->next = ref_cache;\n+\tref_cache = refs;\n \treturn refs;\n }\n \n-static void invalidate_cached_refs(void)\n+static void invalidate_ref_cache(void)\n {\n-\tstruct cached_refs *refs = cached_refs;\n+\tstruct ref_cache *refs = ref_cache;\n \twhile (refs) {\n-\t\tclear_cached_refs(refs);\n+\t\tclear_ref_cache(refs);\n \t\trefs = refs->next;\n \t}\n }\n@@ -257,7 +257,7 @@ void clear_extra_refs(void)\n \n static struct ref_array *get_packed_refs(const char *submodule)\n {\n-\tstruct cached_refs *refs = get_cached_refs(submodule);\n+\tstruct ref_cache *refs = get_ref_cache(submodule);\n \n \tif (!refs->did_packed) {\n \t\tconst char *packed_refs_file;\n@@ -379,7 +379,7 @@ void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname)\n \n static struct ref_array *get_loose_refs(const char *submodule)\n {\n-\tstruct cached_refs *refs = get_cached_refs(submodule);\n+\tstruct ref_cache *refs = get_ref_cache(submodule);\n \n \tif (!refs->did_loose) {\n \t\tget_ref_dir(submodule, \"refs\", &refs->loose);\n@@ -1228,7 +1228,7 @@ int delete_ref(const char *refname, const unsigned char *sha1, int delopt)\n \tret |= repack_without_ref(refname);\n \n \tunlink_or_warn(git_path(\"logs/%s\", lock->ref_name));\n-\tinvalidate_cached_refs();\n+\tinvalidate_ref_cache();\n \tunlock_ref(lock);\n \treturn ret;\n }\n@@ -1527,7 +1527,7 @@ int write_ref_sha1(struct ref_lock *lock,\n \t\tunlock_ref(lock);\n \t\treturn -1;\n \t}\n-\tinvalidate_cached_refs();\n+\tinvalidate_ref_cache();\n \tif (log_ref_write(lock->ref_name, lock->old_sha1, sha1, logmsg) < 0 ||\n \t    (strcmp(lock->ref_name, lock->orig_ref_name) &&\n \t     log_ref_write(lock->orig_ref_name, lock->old_sha1, sha1, logmsg) < 0)) {\n-- \n1.7.7.rc2\n"},{"id":"177826","messageId":"1318819091-7066-3-git-send-email-mhagger@alum.mit.edu","threadId":"28699","inReplyTo":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","subject":"[PATCH v4 2/7] invalidate_ref_cache(): take the submodule as parameter","fromName":"","fromEmail":"mhagger@alum.mit.edu","sentAt":"2011-10-17T02:38:06Z","receivedAt":"2011-10-17T02:38:06Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nInstead of invalidating the ref cache on an all-or-nothing basis,\ninvalidate the cache for a specific submodule.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\n---\n refs.c |   12 ++++--------\n 1 files changed, 4 insertions(+), 8 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex 02b1ef0..68b73aa 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -202,13 +202,9 @@ static struct ref_cache *get_ref_cache(const char *submodule)\n \treturn refs;\n }\n \n-static void invalidate_ref_cache(void)\n+static void invalidate_ref_cache(const char *submodule)\n {\n-\tstruct ref_cache *refs = ref_cache;\n-\twhile (refs) {\n-\t\tclear_ref_cache(refs);\n-\t\trefs = refs->next;\n-\t}\n+\tclear_ref_cache(get_ref_cache(submodule));\n }\n \n static void read_packed_refs(FILE *f, struct ref_array *array)\n@@ -1228,7 +1224,7 @@ int delete_ref(const char *refname, const unsigned char *sha1, int delopt)\n \tret |= repack_without_ref(refname);\n \n \tunlink_or_warn(git_path(\"logs/%s\", lock->ref_name));\n-\tinvalidate_ref_cache();\n+\tinvalidate_ref_cache(NULL);\n \tunlock_ref(lock);\n \treturn ret;\n }\n@@ -1527,7 +1523,7 @@ int write_ref_sha1(struct ref_lock *lock,\n \t\tunlock_ref(lock);\n \t\treturn -1;\n \t}\n-\tinvalidate_ref_cache();\n+\tinvalidate_ref_cache(NULL);\n \tif (log_ref_write(lock->ref_name, lock->old_sha1, sha1, logmsg) < 0 ||\n \t    (strcmp(lock->ref_name, lock->orig_ref_name) &&\n \t     log_ref_write(lock->orig_ref_name, lock->old_sha1, sha1, logmsg) < 0)) {\n-- \n1.7.7.rc2\n"},{"id":"177821","messageId":"1318819091-7066-4-git-send-email-mhagger@alum.mit.edu","threadId":"28699","inReplyTo":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","subject":"[PATCH v4 3/7] invalidate_ref_cache(): expose this function in the refs API","fromName":"","fromEmail":"mhagger@alum.mit.edu","sentAt":"2011-10-17T02:38:07Z","receivedAt":"2011-10-17T02:38:07Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nMake invalidate_ref_cache() an official part of the refs API.  It is\ncurrently a fact of life that code outside of refs.c mucks about with\nreferences.  This change gives such code a way of informing the refs\nmodule that it should no longer trust its cache.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\n---\n refs.c |    2 +-\n refs.h |    8 ++++++++\n 2 files changed, 9 insertions(+), 1 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex 68b73aa..ddd799e 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -202,7 +202,7 @@ static struct ref_cache *get_ref_cache(const char *submodule)\n \treturn refs;\n }\n \n-static void invalidate_ref_cache(const char *submodule)\n+void invalidate_ref_cache(const char *submodule)\n {\n \tclear_ref_cache(get_ref_cache(submodule));\n }\ndiff --git a/refs.h b/refs.h\nindex 0229c57..f439c54 100644\n--- a/refs.h\n+++ b/refs.h\n@@ -80,6 +80,14 @@ extern void unlock_ref(struct ref_lock *lock);\n /** Writes sha1 into the ref specified by the lock. **/\n extern int write_ref_sha1(struct ref_lock *lock, const unsigned char *sha1, const char *msg);\n \n+/*\n+ * Invalidate the reference cache for the specified submodule.  Use\n+ * submodule=NULL to invalidate the cache for the main module.  This\n+ * function must be called if references are changed via a mechanism\n+ * other than the refs API.\n+ */\n+extern void invalidate_ref_cache(const char *submodule);\n+\n /** Setup reflog before using. **/\n int log_ref_setup(const char *ref_name, char *logfile, int bufsize);\n \n-- \n1.7.7.rc2\n"},{"id":"177823","messageId":"1318819091-7066-5-git-send-email-mhagger@alum.mit.edu","threadId":"28699","inReplyTo":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","subject":"[PATCH v4 4/7] clear_ref_cache(): rename parameter","fromName":"","fromEmail":"mhagger@alum.mit.edu","sentAt":"2011-10-17T02:38:08Z","receivedAt":"2011-10-17T02:38:08Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\n...for consistency with the rest of this module.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\n---\n refs.c |   12 ++++++------\n 1 files changed, 6 insertions(+), 6 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex ddd799e..623d673 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -158,13 +158,13 @@ static void free_ref_array(struct ref_array *array)\n \tarray->refs = NULL;\n }\n \n-static void clear_ref_cache(struct ref_cache *ca)\n+static void clear_ref_cache(struct ref_cache *refs)\n {\n-\tif (ca->did_loose)\n-\t\tfree_ref_array(&ca->loose);\n-\tif (ca->did_packed)\n-\t\tfree_ref_array(&ca->packed);\n-\tca->did_loose = ca->did_packed = 0;\n+\tif (refs->did_loose)\n+\t\tfree_ref_array(&refs->loose);\n+\tif (refs->did_packed)\n+\t\tfree_ref_array(&refs->packed);\n+\trefs->did_loose = refs->did_packed = 0;\n }\n \n static struct ref_cache *create_ref_cache(const char *submodule)\n-- \n1.7.7.rc2\n"},{"id":"177822","messageId":"1318819091-7066-6-git-send-email-mhagger@alum.mit.edu","threadId":"28699","inReplyTo":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","subject":"[PATCH v4 5/7] clear_ref_cache(): extract two new functions","fromName":"","fromEmail":"mhagger@alum.mit.edu","sentAt":"2011-10-17T02:38:09Z","receivedAt":"2011-10-17T02:38:09Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nExtract two new functions from clear_cached_refs():\nclear_loose_ref_cache() and clear_packed_ref_cache().\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\n---\n refs.c |   19 +++++++++++++++----\n 1 files changed, 15 insertions(+), 4 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex 623d673..2a21dc3 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -158,13 +158,24 @@ static void free_ref_array(struct ref_array *array)\n \tarray->refs = NULL;\n }\n \n-static void clear_ref_cache(struct ref_cache *refs)\n+static void clear_packed_ref_cache(struct ref_cache *refs)\n {\n-\tif (refs->did_loose)\n-\t\tfree_ref_array(&refs->loose);\n \tif (refs->did_packed)\n \t\tfree_ref_array(&refs->packed);\n-\trefs->did_loose = refs->did_packed = 0;\n+\trefs->did_packed = 0;\n+}\n+\n+static void clear_loose_ref_cache(struct ref_cache *refs)\n+{\n+\tif (refs->did_loose)\n+\t\tfree_ref_array(&refs->loose);\n+\trefs->did_loose = 0;\n+}\n+\n+static void clear_ref_cache(struct ref_cache *refs)\n+{\n+\tclear_packed_ref_cache(refs);\n+\tclear_loose_ref_cache(refs);\n }\n \n static struct ref_cache *create_ref_cache(const char *submodule)\n-- \n1.7.7.rc2\n"},{"id":"177825","messageId":"1318819091-7066-7-git-send-email-mhagger@alum.mit.edu","threadId":"28699","inReplyTo":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","subject":"[PATCH v4 6/7] write_ref_sha1(): only invalidate the loose ref cache","fromName":"","fromEmail":"mhagger@alum.mit.edu","sentAt":"2011-10-17T02:38:10Z","receivedAt":"2011-10-17T02:38:10Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSince write_ref_sha1() can only write loose refs and cannot write\nsymbolic refs, there is no need for it to invalidate the packed ref\ncache.\n\nSuggested by: Martin Fick <mfick@codeaurora.org>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\n---\n refs.c |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex 2a21dc3..a888cea 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -1534,7 +1534,7 @@ int write_ref_sha1(struct ref_lock *lock,\n \t\tunlock_ref(lock);\n \t\treturn -1;\n \t}\n-\tinvalidate_ref_cache(NULL);\n+\tclear_loose_ref_cache(get_ref_cache(NULL));\n \tif (log_ref_write(lock->ref_name, lock->old_sha1, sha1, logmsg) < 0 ||\n \t    (strcmp(lock->ref_name, lock->orig_ref_name) &&\n \t     log_ref_write(lock->orig_ref_name, lock->old_sha1, sha1, logmsg) < 0)) {\n-- \n1.7.7.rc2\n"},{"id":"177827","messageId":"1318819091-7066-8-git-send-email-mhagger@alum.mit.edu","threadId":"28699","inReplyTo":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","subject":"[PATCH v4 7/7] clear_ref_cache(): inline function","fromName":"","fromEmail":"mhagger@alum.mit.edu","sentAt":"2011-10-17T02:38:11Z","receivedAt":"2011-10-17T02:38:11Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nclear_ref_cache() was only called from one place, so inline it\nthere.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\n---\n refs.c |   10 +++-------\n 1 files changed, 3 insertions(+), 7 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex a888cea..d8a4fa3 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -172,12 +172,6 @@ static void clear_loose_ref_cache(struct ref_cache *refs)\n \trefs->did_loose = 0;\n }\n \n-static void clear_ref_cache(struct ref_cache *refs)\n-{\n-\tclear_packed_ref_cache(refs);\n-\tclear_loose_ref_cache(refs);\n-}\n-\n static struct ref_cache *create_ref_cache(const char *submodule)\n {\n \tint len;\n@@ -215,7 +209,9 @@ static struct ref_cache *get_ref_cache(const char *submodule)\n \n void invalidate_ref_cache(const char *submodule)\n {\n-\tclear_ref_cache(get_ref_cache(submodule));\n+\tstruct ref_cache *refs = get_ref_cache(submodule);\n+\tclear_packed_ref_cache(refs);\n+\tclear_loose_ref_cache(refs);\n }\n \n static void read_packed_refs(FILE *f, struct ref_array *array)\n-- \n1.7.7.rc2\n"},{"id":"177834","messageId":"7vty78npk2.fsf@alter.siamese.dyndns.org","threadId":"28699","inReplyTo":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","subject":"Re: [PATCH v4 0/7] Provide API to invalidate refs cache","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2011-10-17T05:40:45Z","receivedAt":"2011-10-17T05:40:45Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Thanks; will replace the topic with these and re-queue.\n"},{"id":"177872","messageId":"20111017184708.GB2540@sandbox-rc","threadId":"28699","inReplyTo":"1318819091-7066-1-git-send-email-mhagger@alum.mit.edu","subject":"Re: [PATCH v4 0/7] Provide API to invalidate refs cache","fromName":"Heiko Voigt","fromEmail":"hvoigt@hvoigt.net","sentAt":"2011-10-17T18:47:08Z","receivedAt":"2011-10-17T18:47:08Z","isPatch":true,"sender":{"key":"hvoigt@hvoigt.net","avatar":"https://avatars.githubusercontent.com/u/184958?v=4"},"body":"Hi,\n\nOn Mon, Oct 17, 2011 at 04:38:04AM +0200, mhagger@alum.mit.edu wrote:\n> I won't myself have time to figure out who, outside of refs.c, has to\n> *call* invalidate_ref_cache().  The candidates that I know off the top\n> of my head are git-clone, git-submodule [1], and git-pack-refs.  It\n> would be great if experts in those areas would insert calls to\n> invalidate_ref_cache() where needed.\n\n[...]\n\n> [1] http://marc.info/?l=git&m=131827641227965&w=2\n>     In this mailing list thread, Heiko Voigt stated that git-submodule\n>     does not modify any references, so it should not have to use the\n>     API.\n\nThis is not entirely true. I was saying that my submodule-merge code is\ncurrently the only one using the refs api for submodules and that does\nnot need to modify submodule refs. I imagine that there will be some\nusers when submodule support matures (e.g. recursive push).\n\nCheers Heiko\n"},{"id":"177879","messageId":"4E9C8557.50709@alum.mit.edu","threadId":"28699","inReplyTo":"20111017184708.GB2540@sandbox-rc","subject":"Re: [PATCH v4 0/7] Provide API to invalidate refs cache","fromName":"Michael Haggerty","fromEmail":"mhagger@alum.mit.edu","sentAt":"2011-10-17T19:43:19Z","receivedAt":"2011-10-17T19:43:19Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"On 10/17/2011 08:47 PM, Heiko Voigt wrote:\n> On Mon, Oct 17, 2011 at 04:38:04AM +0200, mhagger@alum.mit.edu wrote:\n>> [1] http://marc.info/?l=git&m=131827641227965&w=2\n>>     In this mailing list thread, Heiko Voigt stated that git-submodule\n>>     does not modify any references, so it should not have to use the\n>>     API.\n> \n> This is not entirely true. I was saying that my submodule-merge code is\n> currently the only one using the refs api for submodules and that does\n> not need to modify submodule refs. I imagine that there will be some\n> users when submodule support matures (e.g. recursive push).\n\nSorry for misunderstanding/misrepresenting you; thanks for the\nclarification.\n\nMichael\n\n-- \nMichael Haggerty\nmhagger@alum.mit.edu\nhttp://softwareswirl.blogspot.com/\n"}]}