diff options
| author | Junio C Hamano <gitster@pobox.com> | 2026-05-18 14:29:05 +0900 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2026-05-18 14:29:05 +0900 |
| commit | 31cee669ba10e2d32800b72eb72ddbafb425504b (patch) | |
| tree | af924533600418184cef4d76ca5c352784c9598c /t | |
| parent | e308604a4f90a8b4c2ec4b9647ce89f00c348980 (diff) | |
| parent | df67d73ca3268eec5c924d6fe9d2c050ce23f3b1 (diff) | |
| download | git-seen.tar.gz git-seen.zip | |
Merge branch 'jt/config-lock-timeout' into seenseen
Configuration file locking now retries for a short period, avoiding
failures when multiple processes attempt to update the configuration
simultaneously.
Comments?
cf. <xmqqzf1xbl4i.fsf@gitster.g>
* jt/config-lock-timeout:
config: retry acquiring config.lock, configurable via core.configLockTimeout
Diffstat (limited to 't')
| -rwxr-xr-x | t/t1300-config.sh | 17 | ||||
| -rwxr-xr-x | t/t3200-branch.sh | 6 | ||||
| -rwxr-xr-x | t/t5505-remote.sh | 3 |
3 files changed, 23 insertions, 3 deletions
diff --git a/t/t1300-config.sh b/t/t1300-config.sh index a00314d077..a68ec92bdb 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -2993,4 +2993,21 @@ test_expect_success 'writing value with trailing CR not stripped on read' ' test_cmp expect actual ' +test_expect_success 'writing config fails immediately with core.configLockTimeout=0' ' + test_when_finished "rm -f .git/config.lock" && + >.git/config.lock && + test_must_fail git -c core.configLockTimeout=0 config foo.bar baz 2>err && + test_grep "could not lock config file" err +' + +test_expect_success 'writing config retries until lock is released' ' + test_when_finished "rm -f .git/config.lock" && + >.git/config.lock && + { + ( sleep 1 && rm -f .git/config.lock ) & + } && + git -c core.configLockTimeout=5000 config retried.key value && + test "$(git config retried.key)" = value +' + test_done diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh index a36e5ee80a..58c23a7702 100755 --- a/t/t3200-branch.sh +++ b/t/t3200-branch.sh @@ -1037,7 +1037,8 @@ test_expect_success '--set-upstream-to fails on locked config' ' test_when_finished "rm -f .git/config.lock" && >.git/config.lock && git branch locked && - test_must_fail git branch --set-upstream-to locked 2>err && + test_must_fail git -c core.configLockTimeout=0 \ + branch --set-upstream-to locked 2>err && test_grep "could not lock config file .git/config" err ' @@ -1068,7 +1069,8 @@ test_expect_success '--unset-upstream should fail if config is locked' ' test_when_finished "rm -f .git/config.lock" && git branch --set-upstream-to locked && >.git/config.lock && - test_must_fail git branch --unset-upstream 2>err && + test_must_fail git -c core.configLockTimeout=0 \ + branch --unset-upstream 2>err && test_grep "could not lock config file .git/config" err ' diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh index e592c0bcde..aea9222649 100755 --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@ -1327,7 +1327,8 @@ test_expect_success 'remote set-url with locked config' ' test_when_finished "rm -f .git/config.lock" && git config --get-all remote.someremote.url >expect && >.git/config.lock && - test_must_fail git remote set-url someremote baz && + test_must_fail git -c core.configLockTimeout=0 \ + remote set-url someremote baz && git config --get-all remote.someremote.url >actual && cmp expect actual ' |
