From: Jeff King Date: Thu, 26 Jan 2012 22:43:50 GMT Subject: Re: [PATCH 1/4] config: add include directive Message-ID: <20120126224350.GA13241@sigill.intra.peff.net> In-Reply-To: <20120126222532.GA12855@sigill.intra.peff.net> On Thu, Jan 26, 2012 at 05:25:32PM -0500, Jeff King wrote: > There's a slight complication with when to clear the "I have seen this" > mark for each source. If you are interested only in breaking cycles, > then obviously you can just clear the marks as you pop the stack. But if > you want to stop repeated inclusion down different branches of the > include tree, you need to keep the marks until you're done (e.g., the > same file referenced by .git/config and ~/.gitconfig). But you do still > need to clear them, because we repeatedly call git_config with different > callback functions, and we need to re-parse each time. > > I think it should be sufficient to make the marks live through > git_config(), and get cleared after that (so all of .git/config, > ~/.gitconfig, and /etc/gitconfig will only load a given include once, > but another call to git_config will load it again). Ugh, actually it's a little trickier. Because a git_config callback can call git_config again, we want one set of marks per git_config invocation, but we need to handle two simultaneous invocations. But I think it's OK. We can stuff the data into the "git_config_include_data", which has the proper scope. -Peff