On Tue, Jun 20, 2023 at 8:31 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Tao Klerks <tao@xxxxxxxxxx> writes: > > > My apologies for the self-reply, I did find a workaround here: > > > > git -c remote.origin.url log SOME_HASH_NOT_IN_REFSPEC > > > > I don't understand what's happening here at all, because setting > > "remote.origin.url" to "True" in this way works to prevent the > > normally configured URL from kicking in, ... > > Interesting. This happens inside remote.c:handle_config() where > git_config_string() is used to reject a non-string value given to > the "remote.<name>.url" variable and abort the process to read from > the configuration file by returning -1 and causes whoever uses that > configuration value to die. As the command line configuration is > read first, aborting the configuration reader early would mean that > the configured values would not even be read. > > I am not sure why this does not cause the entire thing to die, > though. It requires further digging, for which I do not have time > for right now.. I'm reasonably sure this is because the process that reads this config value is a subprocess, and that subprocess dying was actually *helping* me in this case. > > > ... but setting a different value > > (or empty value) does not. > > Most likely, this is because you are giving a syntactically correct > value so the usual "last one wins" logic kicks in. > I don't understand - surely what's provided "-c" should beat what's in the repo's .config? "Last one wins" is exactly what I would expect, but don't seem to be seeing... > In hindsight, I think (1) the first one should probably fail the > "git log" process (not just the lazy fetch subprocess), and (2) > there should be an explicit way, e.g. giving an empty string, to > "clear" the list of .url accumulated so far. > > (2) may look something silly like this: > > remote.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git c/remote.c w/remote.c > index 0764fca0db..ecc146856a 100644 > --- c/remote.c > +++ w/remote.c > @@ -64,12 +64,22 @@ static const char *alias_url(const char *url, struct rewrites *r) > > static void add_url(struct remote *remote, const char *url) > { > + if (!*url) { > + remote->url_nr = 0; > + return; > + } > + > ALLOC_GROW(remote->url, remote->url_nr + 1, remote->url_alloc); > remote->url[remote->url_nr++] = url; > } > > static void add_pushurl(struct remote *remote, const char *pushurl) > { > + if (!*pushurl) { > + remote->pushurl_nr = 0; > + return; > + } > + > ALLOC_GROW(remote->pushurl, remote->pushurl_nr + 1, remote->pushurl_alloc); > remote->pushurl[remote->pushurl_nr++] = pushurl; > } > Thank you, I'll play with this when I get the chance.