From 8bbd051e0b1a072b998284d6fb79193df8f28d29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=A7=A6?= Date: Mon, 17 Jun 2019 23:26:33 +0800 Subject: [PATCH] fix(git): limit retry times, avoid unlimited retries (#172) --- lib/util/git.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/util/git.js b/lib/util/git.js index 997404dd..7991833a 100644 --- a/lib/util/git.js +++ b/lib/util/git.js @@ -40,8 +40,10 @@ const GIT_TRANSIENT_ERRORS = [ const GIT_TRANSIENT_ERROR_RE = new RegExp(GIT_TRANSIENT_ERRORS) -function shouldRetry (error) { - return GIT_TRANSIENT_ERROR_RE.test(error) +const GIT_TRANSIENT_ERROR_MAX_RETRY_NUMBER = 3 + +function shouldRetry (error, number) { + return GIT_TRANSIENT_ERROR_RE.test(error) && (number < GIT_TRANSIENT_ERROR_MAX_RETRY_NUMBER) } const GIT_ = 'GIT_' @@ -188,7 +190,7 @@ function execGit (gitArgs, gitOpts, opts) { opts.log.silly('pacote', 'Retrying git command: ' + gitArgs.join(' ') + ' attempt # ' + number) } return execFileAsync(gitPath, gitArgs, mkOpts(gitOpts, opts)).catch((err) => { - if (shouldRetry(err)) { + if (shouldRetry(err, number)) { retry(err) } else { throw err @@ -219,7 +221,7 @@ function spawnGit (gitArgs, gitOpts, opts) { child.stderr.on('data', d => { stderr += d }) return finished(child, true).catch(err => { - if (shouldRetry(stderr)) { + if (shouldRetry(stderr, number)) { retry(err) } else { err.stderr = stderr