From: Junio C Hamano <gitster@pobox.com>
To: Okhuomon Ajayi <okhuomonajayi54@gmail.com>
Cc: git@vger.kernel.org, christian.couder@gmail.com,
usmanakinyemi202@gmail.com, siddharthasthana31@gmail.com,
kaartic.sivaraam@gmail.com
Subject: Re: [Outreachy PATCH] credential-store: add lockTimeout config option
Date: Thu, 15 Oct 2026 10:50:13 -0700 [thread overview]
Message-ID: <xmqqcxtaonu2.fsf@gitster.g> (raw)
In-Reply-To: <20261014232739.23021-1-okhuomonajayi54@gmail.com> (Okhuomon Ajayi's message of "Thu, 15 Oct 2026 00:27:39 +0100")
Okhuomon Ajayi <okhuomonajayi54@gmail.com> writes:
> diff --git a/builtin/credential-store.c b/builtin/credential-store.c
> index bc1453c6b2..9fef54d218 100644
> --- a/builtin/credential-store.c
> +++ b/builtin/credential-store.c
> @@ -67,7 +67,9 @@ static void rewrite_credential_file(const char *fn, struct credential *c,
> {
> int timeout_ms = 1000;
>
> - repo_config_get_int(the_repository, "credentialstore.locktimeoutms", &timeout_ms);
> + /* lockTimeoutMS is a deprecated synonym of lockTimeout. */
> + if (repo_config_get_int(the_repository, "credentialstore.locktimeout", &timeout_ms))
> + repo_config_get_int(the_repository, "credentialstore.locktimeoutms", &timeout_ms);
> if (hold_lock_file_for_update_timeout(&credential_lock, fn, 0, timeout_ms) < 0)
> die_errno(_("unable to get credential storage lock in %d ms"), timeout_ms);
Around this point the file is already full of overly long lines, but
the patch is making it even worse.
> diff --git a/t/t0302-credential-store.sh b/t/t0302-credential-store.sh
> index c1cd60edd0..408f26bb10 100755
> --- a/t/t0302-credential-store.sh
> +++ b/t/t0302-credential-store.sh
> @@ -210,4 +210,60 @@ test_expect_success 'get: store file can contain empty/bogus lines' '
> EOF
> '
>
> +# Holding creds.lock makes the next store fail. The error reports the
> +# timeout that was actually used, so "in 0 ms" means that name won.
> +test_expect_success 'credentialStore.lockTimeoutMS=0 gives up immediately' '
> + test_when_finished "rm -f creds creds.lock" &&
> + >"creds.lock" &&
> + test_must_fail git -c credentialStore.lockTimeoutMS=0 \
> + credential-store --file=creds store 2>err <<-\EOF &&
> + protocol=https
> + host=example.com
> + username=store-user
> + password=store-pass
> + EOF
> + test_grep "unable to get credential storage lock in 0 ms" err
> +'
> +
> +test_expect_success 'credentialStore.lockTimeout=0 gives up immediately' '
> + test_when_finished "rm -f creds creds.lock" &&
> + >"creds.lock" &&
> + test_must_fail git -c credentialStore.lockTimeout=0 \
> + credential-store --file=creds store 2>err <<-\EOF &&
> + protocol=https
> + host=example.com
> + username=store-user
> + password=store-pass
> + EOF
> + test_grep "unable to get credential storage lock in 0 ms" err
> +'
As it is necessary to keep the above two in sync forever, it may
make sense to do this instead:
for v lockTimeout lockTimeoutMS
do
test_expect_success "credentialStore.$v=0 gives up immediately" '
...
test_must_fail git -c credentialStore.$v=0 \
credential-store --file=creds store 2>err <<-\EOF &&
...
test_grep "unable to get ..." err
'
done
It is a common mistake to use double-quote in an attempt to have $v
expanded before it is passed to text_expect_success function, but
the variable $v is dereferenced correctly inside the body of the
test that is quoted with single-quote as it is eval'ed, so the way
the above is written is right.
> +test_expect_success 'credentialStore.lockTimeout wins when both are set' '
> + test_when_finished "rm -f creds creds.lock" &&
> + >"creds.lock" &&
> + test_must_fail git \
> + -c credentialStore.lockTimeout=0 \
> + -c credentialStore.lockTimeoutMS=500 \
> + credential-store --file=creds store 2>err <<-\EOF &&
> + protocol=https
> + host=example.com
> + username=store-user
> + password=store-pass
> + EOF
> + test_grep "unable to get credential storage lock in 0 ms" err
> +'
This is understandable. The presense of locktimeout=0 hides
whatever locktimeoutms is set to, so it should fail the same way as
the earlier two tests. Wait, nobody unlocks creds.lock, so what
should happen if the line that sets locktimeout=0 is removed?
Ahh, the key to this test is that we make sure "in 0 ms" part of the
error message does not say "in 500 ms" to ensure which of the two
variables are being used. It is not like the credential-store command
would fail with 0ms timeout but succees with 500ms timeout.
> +test_expect_success 'credentialStore.lockTimeout allows a store' '
> + test_when_finished "rm -f creds" &&
> + git -c credentialStore.lockTimeout=1000 \
> + credential-store --file=creds store <<-\EOF &&
> + protocol=https
> + host=example.com
> + username=store-user
> + password=store-pass
> + EOF
> + echo "https://store-user:store-pass@example.com" >expect &&
> + test_cmp expect creds
> +'
This one I I am not sure what it is trying to test, though. Would
the test start failing as the machine is loaded more and 1000 ms
becomes insufficient? No. The thing is not locked, nobody takes a
lock competing with our test, so with any value of the timeout we
should succeed, no? Or would it fail if the timeout is set to 0ms?
Assuming that there is a reason to run this test, should it also be
testing locktimeoutms to ensure both variables behave the same way
when set independently, similarly to the two tests I rewrote into a
for loop?
Thanks.
next prev parent reply other threads:[~2026-10-15 17:50 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-02 8:31 [PATCH] rerere: keep a background gc from killing a rebase Thomas Bachem via GitGitGadget
2026-09-02 13:27 ` Phillip Wood
2026-09-02 15:07 ` Thomas Bachem
2026-09-03 13:50 ` Phillip Wood
2026-09-03 7:40 ` Patrick Steinhardt
2026-09-03 8:11 ` Thomas Bachem
2026-09-03 8:32 ` Patrick Steinhardt
2026-09-03 12:12 ` Thomas Bachem
2026-09-03 13:50 ` Phillip Wood
2026-09-04 7:44 ` [PATCH v2] " Thomas Bachem via GitGitGadget
2026-09-04 15:21 ` Phillip Wood
2026-09-04 15:55 ` Thomas Bachem
2026-09-07 10:07 ` Phillip Wood
2026-09-04 17:06 ` Junio C Hamano
2026-09-04 18:17 ` Thomas Bachem
2026-09-04 15:51 ` [PATCH v3] " Thomas Bachem via GitGitGadget
2026-09-04 19:08 ` Junio C Hamano
2026-09-05 5:41 ` Thomas Bachem
2026-09-05 16:10 ` Junio C Hamano
2026-09-06 10:29 ` Thomas Bachem
2026-09-07 7:41 ` Patrick Steinhardt
2026-09-14 8:04 ` [PATCH v4 0/2] rerere: wait for MERGE_RR.lock, and go on at a conflict Thomas Bachem via GitGitGadget
2026-09-14 8:04 ` [PATCH v4 1/2] rerere: wait for MERGE_RR.lock, and let the gc skip it Thomas Bachem via GitGitGadget
2026-09-28 8:18 ` Patrick Steinhardt
2026-09-14 8:04 ` [PATCH v4 2/2] rerere: go on at a conflict when the lock stays busy Thomas Bachem via GitGitGadget
2026-09-28 8:18 ` Patrick Steinhardt
2026-09-28 11:58 ` [PATCH v5 0/3] rerere: wait for MERGE_RR.lock, and go on at a conflict Thomas Bachem via GitGitGadget
2026-09-28 11:58 ` [PATCH v5 1/3] rerere: wait for MERGE_RR.lock before giving up Thomas Bachem via GitGitGadget
2026-09-28 11:58 ` [PATCH v5 2/3] rerere: add "gc --auto" that skips a held lock Thomas Bachem via GitGitGadget
2026-09-30 15:00 ` Patrick Steinhardt
2026-10-01 8:08 ` Thomas Bachem
2026-10-01 11:19 ` Patrick Steinhardt
2026-09-28 11:58 ` [PATCH v5 3/3] rerere: go on at a conflict when the lock stays busy Thomas Bachem via GitGitGadget
2026-10-02 11:11 ` [PATCH v6 0/3] rerere: wait for MERGE_RR.lock, and go on at a conflict Thomas Bachem via GitGitGadget
2026-10-02 11:11 ` [PATCH v6 1/3] rerere: wait for MERGE_RR.lock before giving up Thomas Bachem via GitGitGadget
2026-10-02 11:11 ` [PATCH v6 2/3] rerere: add "gc --skip-locked" for auto maintenance Thomas Bachem via GitGitGadget
2026-10-09 9:06 ` Patrick Steinhardt
2026-10-10 9:09 ` Thomas Bachem
2026-10-02 11:11 ` [PATCH v6 3/3] rerere: go on at a conflict when the lock stays busy Thomas Bachem via GitGitGadget
2026-10-09 9:06 ` Patrick Steinhardt
2026-10-10 9:09 ` Thomas Bachem
2026-10-10 10:13 ` [PATCH v7 0/2] rerere: wait for MERGE_RR.lock, but not in auto maintenance Thomas Bachem via GitGitGadget
2026-10-10 10:13 ` [PATCH v7 1/2] rerere: wait for MERGE_RR.lock before giving up Thomas Bachem via GitGitGadget
2026-10-11 0:39 ` Junio C Hamano
2026-10-11 14:18 ` Thomas Bachem
2026-10-12 0:32 ` Junio C Hamano
2026-10-14 15:55 ` Okhuomon Ajayi
2026-10-14 23:27 ` [Outreachy PATCH] credential-store: add lockTimeout config option Okhuomon Ajayi
2026-10-15 17:50 ` Junio C Hamano [this message]
2026-10-10 10:13 ` [PATCH v7 2/2] rerere: add "gc --skip-locked" for auto maintenance Thomas Bachem via GitGitGadget
2026-10-13 7:31 ` Patrick Steinhardt
2026-10-13 12:07 ` [PATCH v8 0/2] rerere: wait for MERGE_RR.lock, but not in " Thomas Bachem via GitGitGadget
2026-10-13 12:07 ` [PATCH v8 1/2] rerere: wait for MERGE_RR.lock before giving up Thomas Bachem via GitGitGadget
2026-10-13 12:07 ` [PATCH v8 2/2] rerere: add "gc --skip-locked" for auto maintenance Thomas Bachem via GitGitGadget
2026-10-13 12:22 ` [PATCH v8 0/2] rerere: wait for MERGE_RR.lock, but not in " Patrick Steinhardt
2026-10-13 16:20 ` Junio C Hamano
2026-10-14 5:36 ` Patrick Steinhardt
2026-10-14 10:43 ` Thomas Bachem
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqcxtaonu2.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=kaartic.sivaraam@gmail.com \
--cc=okhuomonajayi54@gmail.com \
--cc=siddharthasthana31@gmail.com \
--cc=usmanakinyemi202@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox