Message ID | a2a891a069f46d3d77cafe61f64402c93cffaae4.1687290233.git.gitgitgadget@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | config: remove global state from config iteration | expand |
"Glen Choo via GitGitGadget" <gitgitgadget@gmail.com> writes: > From: Glen Choo <chooglen@google.com> > > current_config_*() functions aren't meant to be called outside of > config callbacks because they read state that is only set when iterating > through config. Interesting. And config_context is about expressing the state of the iteration, so presumably some of these callers that do not have config_context to pass (because they happen outside iterations) will now (can|have to) pass NULL or something to say "I am asking format but from outside any iteration" or something? > +test_expect_success 'urlmatch with --show-scope' ' > + cat >.git/config <<-\EOF && > + [http "https://weak.example.com"] > + sslVerify = false > + cookieFile = /tmp/cookie.txt > + EOF > + > + cat >expect <<-EOF && > + unknown http.cookiefile /tmp/cookie.txt > + unknown http.sslverify false > + EOF > + git config --get-urlmatch --show-scope HTTP https://weak.example.com >actual && > + test_cmp expect actual > +' > + > test_expect_success 'urlmatch favors more specific URLs' ' > cat >.git/config <<-\EOF && > [http "https://example.com/"] > @@ -2055,6 +2070,10 @@ test_expect_success '--show-origin blob ref' ' > test_cmp expect output > ' > > +test_expect_success '--show-origin with --default' ' > + test_must_fail git config --show-origin --default foo some.key > +' > + > test_expect_success '--show-scope with --list' ' > cat >expect <<-EOF && > global user.global=true > @@ -2123,6 +2142,12 @@ test_expect_success '--show-scope with --show-origin' ' > test_cmp expect output > ' > > +test_expect_success '--show-scope with --default' ' > + git config --show-scope --default foo some.key >actual && > + echo "unknown foo" >expect && > + test_cmp expect actual > +' > + > test_expect_success 'override global and system config' ' > test_when_finished rm -f \"\$HOME\"/.gitconfig && > cat >"$HOME"/.gitconfig <<-EOF &&
Junio C Hamano <gitster@pobox.com> writes: >> current_config_*() functions aren't meant to be called outside of >> config callbacks because they read state that is only set when iterating >> through config. > > Interesting. And config_context is about expressing the state of > the iteration, so presumably some of these callers that do not have > config_context to pass (because they happen outside iterations) will > now (can|have to) pass NULL or something to say "I am asking format > but from outside any iteration" or something? Yup, they now have to pass a default value for config_context. For .kvi, it should be what's given by KVI_INIT (the next patch has an example).
"Glen Choo via GitGitGadget" <gitgitgadget@gmail.com> writes: > +test_expect_success '--show-origin with --default' ' > + test_must_fail git config --show-origin --default foo some.key > +' On my machine, this fails with BUG: config.c:4035: current_config_origin_type called outside config callback /usr/local/google/home/jonathantanmy/git/t/test-lib-functions.sh: line 1067: 3255109 Aborted "$@" 2>&7 test_must_fail: died by signal 6: git config --show-origin --default foo some.key (So it indeed fails, as expected, but test_must_fail seems to not like the exit code.) Not sure if we need to be more precise with the exit code we're testing for.
On Fri, Jun 23, 2023 at 01:32:19PM -0700, Jonathan Tan wrote: > "Glen Choo via GitGitGadget" <gitgitgadget@gmail.com> writes: > > +test_expect_success '--show-origin with --default' ' > > + test_must_fail git config --show-origin --default foo some.key > > +' > > On my machine, this fails with > > BUG: config.c:4035: current_config_origin_type called outside config callback > /usr/local/google/home/jonathantanmy/git/t/test-lib-functions.sh: line 1067: 3255109 Aborted "$@" 2>&7 > test_must_fail: died by signal 6: git config --show-origin --default foo some.key > > (So it indeed fails, as expected, but test_must_fail seems to not like > the exit code.) > > Not sure if we need to be more precise with the exit code we're testing > for. That is test_must_fail operating as intended. We should _never_ hit a BUG() call, no matter what garbage we get from the user or the disk. The resolution is generally one of: - there really is a bug, so we should fix it - the invocation is garbage and expected to fail, but we should catch it sooner and give a nice error message, rather than getting as far as a BUG() call But I didn't look at the patches to know which case this is. -Peff
Jonathan Tan <jonathantanmy@google.com> writes: > "Glen Choo via GitGitGadget" <gitgitgadget@gmail.com> writes: >> +test_expect_success '--show-origin with --default' ' >> + test_must_fail git config --show-origin --default foo some.key >> +' > > On my machine, this fails with > > BUG: config.c:4035: current_config_origin_type called outside config callback > /usr/local/google/home/jonathantanmy/git/t/test-lib-functions.sh: line 1067: 3255109 Aborted "$@" 2>&7 > test_must_fail: died by signal 6: git config --show-origin --default foo some.key > > (So it indeed fails, as expected, but test_must_fail seems to not like > the exit code.) Ah you're right. I was under the impression that this was doing the right thing on MacOS, but it doesn't work there either. I think a good way to assert that we run into BUG() (Maybe test_match_signal on the numeric value of SIGABRT? But that sounds error prone), so I'll either use test_expect_failure or squash this patch.
diff --git a/t/t1300-config.sh b/t/t1300-config.sh index 86bfbc2b364..fa6a8df2521 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -1668,6 +1668,21 @@ test_expect_success 'urlmatch' ' test_cmp expect actual ' +test_expect_success 'urlmatch with --show-scope' ' + cat >.git/config <<-\EOF && + [http "https://weak.example.com"] + sslVerify = false + cookieFile = /tmp/cookie.txt + EOF + + cat >expect <<-EOF && + unknown http.cookiefile /tmp/cookie.txt + unknown http.sslverify false + EOF + git config --get-urlmatch --show-scope HTTP https://weak.example.com >actual && + test_cmp expect actual +' + test_expect_success 'urlmatch favors more specific URLs' ' cat >.git/config <<-\EOF && [http "https://example.com/"] @@ -2055,6 +2070,10 @@ test_expect_success '--show-origin blob ref' ' test_cmp expect output ' +test_expect_success '--show-origin with --default' ' + test_must_fail git config --show-origin --default foo some.key +' + test_expect_success '--show-scope with --list' ' cat >expect <<-EOF && global user.global=true @@ -2123,6 +2142,12 @@ test_expect_success '--show-scope with --show-origin' ' test_cmp expect output ' +test_expect_success '--show-scope with --default' ' + git config --show-scope --default foo some.key >actual && + echo "unknown foo" >expect && + test_cmp expect actual +' + test_expect_success 'override global and system config' ' test_when_finished rm -f \"\$HOME\"/.gitconfig && cat >"$HOME"/.gitconfig <<-EOF &&