From: Stefan Sperling Subject: Re: allow remotes without urls in git config; add tests To: Kyle Ackerman Cc: Omar Polo , James Cook , gameoftrees@openbsd.org Date: Thu, 25 Jan 2024 11:32:03 +0100 On Wed, Jan 24, 2024 at 11:58:46PM -0600, Kyle Ackerman wrote: > With your modification to got-read-gitconfig.c and his new regressions, > your diff throws 2 failed regressions because of "privsep peer process > closed pipe". Thanks Kyle! I see the mistake I made, which Omar also pointed out off-list. This is a fixed version which passes all tests including the ones added by James. Again, this is just a style change relative to the original diff by James. diff /home/stsp/src/got commit - cfcfb026c8c94bb60b400f6b21b89bce7b698873 path + /home/stsp/src/got blob - 99f2a5a5d4fdc582151efa06eb679bf4bfd09a69 file + libexec/got-read-gitconfig/got-read-gitconfig.c --- libexec/got-read-gitconfig/got-read-gitconfig.c +++ libexec/got-read-gitconfig/got-read-gitconfig.c @@ -195,6 +195,17 @@ get_boolean_val(char *val) strcmp(val, "1") == 0); } +static int +skip_node(struct got_gitconfig *gitconfig, struct got_gitconfig_list_node *node) +{ + /* + * Skip config nodes which do not describe remotes, and remotes + * which do not have a fetch URL defined (as used by git-annex). + */ + return (strncasecmp("remote \"", node->field, 8) != 0 || + got_gitconfig_get_str(gitconfig, node->field, "url") == NULL); +} + static const struct got_error * gitconfig_remotes_request(struct imsgbuf *ibuf, struct got_gitconfig *gitconfig) { @@ -212,7 +223,7 @@ gitconfig_remotes_request(struct imsgbuf *ibuf, struct return err; TAILQ_FOREACH(node, §ions->fields, link) { - if (strncasecmp("remote \"", node->field, 8) != 0) + if (skip_node(gitconfig, node)) continue; nremotes++; } @@ -232,7 +243,7 @@ gitconfig_remotes_request(struct imsgbuf *ibuf, struct TAILQ_FOREACH(node, §ions->fields, link) { char *name, *end, *mirror; - if (strncasecmp("remote \"", node->field, 8) != 0) + if (skip_node(gitconfig, node)) continue; name = strdup(node->field + 8); @@ -247,20 +258,11 @@ gitconfig_remotes_request(struct imsgbuf *ibuf, struct remotes[i].fetch_url = got_gitconfig_get_str(gitconfig, node->field, "url"); - if (remotes[i].fetch_url == NULL) { - err = got_error(GOT_ERR_GITCONFIG_SYNTAX); - goto done; - } remotes[i].send_url = got_gitconfig_get_str(gitconfig, node->field, "pushurl"); if (remotes[i].send_url == NULL) - remotes[i].send_url = got_gitconfig_get_str(gitconfig, - node->field, "url"); - if (remotes[i].send_url == NULL) { - err = got_error(GOT_ERR_GITCONFIG_SYNTAX); - goto done; - } + remotes[i].send_url = remotes[i].fetch_url; remotes[i].mirror_references = 0; mirror = got_gitconfig_get_str(gitconfig, node->field,