On 10/12/2011 09:19 PM, Junio C Hamano wrote: > Michael Haggerty <mhagger@xxxxxxxxxxxx> writes: > >> Instead of invalidating the ref cache on an all-or-nothing basis, >> allow the cache for individual submodules to be invalidated. > > That "allow" does not seem to describe what this patch does. It disallows > the wholesale invalidation and forces the caller to invalidate ref cache > individually. > > Probably that is what all the existing callers want, but I would have > expected that an existing feature would be kept, perhaps like this > instead: > > if (!submodule) { > struct ref_cache *c; > for (c = ref_cache; c; c = c->next) > clear_ref_cache(c); > } else { > clear_ref_cache(get_ref_cache(submodule); > } > > Not a major "vetoing" objection, just a comment. Indeed, it is currently not possible for code outside of refs.c to implement "forget everything" using the "forget one" function (because there is no API for getting the list of caches that are currently in memory). A "forget everything" function might be useful for code that delegates to a subprocess, if it does not know what submodules the subprocess has tinkered with. Heiko, does that apply to the future submodule code? Your specific suggestion would not work because currently submodule==NULL signifies the main module. However, it would be easy to add the few-line function when/if it is needed. I guess the bigger issue for me is whether the whole submodule cache thing is going to continue to be needed. I really am too ignorant of how submodules work to be able to judge. From Heiko's recent email it sounds like things might be moving in the direction of "top-level git doesn't need to know much about submodules because it delegates to subprocesses". He also said that submodule references are not modified by the top-level git process, meaning that it might be sensible for the submodule reference cache to be less capable than the main module reference cache. But if things move in the other direction (submodules handled by the top-level git process), let alone if git is libified, then it seems inevitable that there will someday be a "submodule" object that keeps track of its own ref cache, with the submodule objects rather than the submodule reference caches looked up by submodule name. Given that I'm still very new to the codebase, I'm mostly making "peephole changes" and so I'm happy to get your feedback about how this fits into the grand scheme of things. Michael -- Michael Haggerty mhagger@xxxxxxxxxxxx http://softwareswirl.blogspot.com/ -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html