On Fri, May 26, 2017 at 12:04:03PM +0200, SZEDER Gábor wrote: > > but given that it lazy-parses in > > some cases, it feels a little dangerous. > > I'm not sure about lazy parsing. > remote_get() returns a fully-parsed, cached struct remote instance > without re-reading the configuration, so all fields directly > corresponding to configuration variables stay the same. However, it > does parse fetch and push refspecs on every invocation. So if it were > to be called to return the origin remote more than once during > cloning, then the default refspec would get lost on subsequent > invocations. Is this what you meant with dangerous? More or less. I actually didn't look far enough to see under what circumstances we might re-parse (or might not have parsed when we add our extra refspec), but that's definitely the sort of thing I was worried about. > (Sidenote: and it would leak some memory, too, because it re-parses > the refspecs without free()ing the results of the previous > invocation.) Yes, I'd argue that the current code is buggy, since: x = remote_get("foo"); y = remote_get("foo"); is a guaranteed leak. It seems like remote_get_1() should protect the call to parse_fetch_refspec() by checking whether ret->fetch is NULL (and ditto for ret->push). > Your proposed function to add a refspec as a string would eliminate > this danger. Yeah, I think it's not that hard to support. I'd just rather have the logic inside remote.c, rather than infecting the caller with the complexity. > It certainly looks better, see the patch below the scissors for > reference, and I thought it works because until last night I only run > the corresponding test script (t5611-clone-config), though I know very > well that "Thou shalt always run the full test suite!" :) > > Unfortunately, putting the default refspec into this temporary > configuration environment breaks a few submodule tests > (t5614-clone-submodules or t5614-clone-submodules-shallow (it's got > renamed between this topic and master), t7407-submodule-foreach, > t7410-submodule-checkout-to), because it "leaks" to the submodule > environment. Doh, of course. I didn't think of that. That's probably a bad direction, then, as there's no "just for this process" global config. -Peff