diff options
author | Simão Afonso <simao.afonso@powertools-tech.com> | 2020-11-25 19:31:23 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-11-25 21:30:18 +0100 |
commit | df7f915fb6fb28ea5a1e3103251c251e53a80b1b (patch) | |
tree | 45236873cfb3b934ff3d7d44d42451fe65c27963 /builtin/credential-store.c | |
parent | Seventh batch (diff) | |
download | git-df7f915fb6fb28ea5a1e3103251c251e53a80b1b.tar.xz git-df7f915fb6fb28ea5a1e3103251c251e53a80b1b.zip |
crendential-store: use timeout when locking file
When holding the lock for rewriting the credential file, use a timeout
to avoid race conditions when the credentials file needs to be updated
in parallel.
An example would be doing `fetch --all` on a repository with several
remotes that need credentials, using parallel fetching.
The timeout can be configured using "credentialStore.lockTimeoutMS",
defaulting to 1 second.
Signed-off-by: Simão Afonso <simao.afonso@powertools-tech.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to '')
-rw-r--r-- | builtin/credential-store.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/builtin/credential-store.c b/builtin/credential-store.c index 5331ab151a..ae3c1ba75f 100644 --- a/builtin/credential-store.c +++ b/builtin/credential-store.c @@ -1,4 +1,5 @@ #include "builtin.h" +#include "config.h" #include "lockfile.h" #include "credential.h" #include "string-list.h" @@ -58,8 +59,11 @@ static void print_line(struct strbuf *buf) static void rewrite_credential_file(const char *fn, struct credential *c, struct strbuf *extra) { - if (hold_lock_file_for_update(&credential_lock, fn, 0) < 0) - die_errno("unable to get credential storage lock"); + int timeout_ms = 1000; + + git_config_get_int("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); if (extra) print_line(extra); parse_credential_file(fn, c, NULL, print_line); |