On Thu, Nov 28, 2024 at 12:25:44PM +0900, Junio C Hamano wrote: > Justin Tobler <jltobler@xxxxxxxxx> writes: > > > For `fetch_pack_fsck_config()` to discern between errors and unhandled > > config variables, the return code when `git_config_path()` errors is > > changed to a different value also indicating success. This frees up the > > previous return code to now indicate the provided config variable > > was unhandled. The behavior remains functionally the same. > > > @@ -1866,9 +1866,9 @@ static int fetch_pack_config_cb(const char *var, const char *value, > > char *path ; > > > > if (git_config_pathname(&path, var, value)) > > - return 1; > > + return 0; > > So, after getting complaint about a misconfiguration, the caller > used to be able to, if they wanted to, tell two cases apart: a > misconfigured variable was ignored here, and we happily parsed the > configuration. Now they no longer can tell them apart, because we > return 0 for both cases. I wonder why we want to ignore these errors though. Grepping through the codebase surfaces that all other callsites of `git_config_pathname()` return its return value directly, which means that we'll die in case the path name cannot be parsed. Shouldn't we do the same here, or is there a good reason why we need to ignore it other than "We used to do it like that"? In other words, I would have the below diff. Other than that this patch series looks good to me. Patrick diff --git a/fetch-pack.c b/fetch-pack.c index fe1fb3c1b7c..c60627bba4e 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -1863,10 +1863,13 @@ static int fetch_pack_config_cb(const char *var, const char *value, const char *msg_id; if (strcmp(var, "fetch.fsck.skiplist") == 0) { - char *path ; + char *path; + int err; + + err = git_config_pathname(&path, var, value); + if (err < 0) + return -1; - if (git_config_pathname(&path, var, value)) - return 1; strbuf_addf(&fsck_msg_types, "%cskiplist=%s", fsck_msg_types.len ? ',' : '=', path); free(path); diff --git a/t/t5504-fetch-receive-strict.sh b/t/t5504-fetch-receive-strict.sh index 138e6778a47..73d6b3874de 100755 --- a/t/t5504-fetch-receive-strict.sh +++ b/t/t5504-fetch-receive-strict.sh @@ -240,6 +240,15 @@ test_expect_success 'push with receive.fsck.skipList' ' git push --porcelain dst bogus ' +test_expect_success 'fetch with implitcit fetch.fsck.skipList value fails' ' + test_when_finished "rm -rf source repo" && + git init source && + test_commit -C source initial && + git init repo && + test_must_fail git -C repo -c fetch.fsck.skipList fetch "file://$(pwd)/source" 2>err && + test_grep "unable to parse ${SQ}fetch.fsck.skiplist${SQ}" err +' + test_expect_success 'fetch with fetch.fsck.skipList' ' refspec=refs/heads/bogus:refs/heads/bogus && git push . $commit:refs/heads/bogus &&