diff --git a/lib/git.js b/lib/git.js index 000ee9fc..a2a6cbb7 100644 --- a/lib/git.js +++ b/lib/git.js @@ -254,8 +254,11 @@ class GitFetcher extends Fetcher { resolved: this.resolved, integrity: null, // it'll always be different, if we have one }).extract(tmp).then(() => handler(`${tmp}${this.spec.gitSubdir || ''}`), er => { - // fall back to ssh download if tarball fails - if (er.constructor.name.match(/^Http/)) { + // fall back to clone if the tarball download fails due to an + // HTTP error or if the response is not a valid tarball (e.g. + // a hosted provider returning an HTML sign-in page with 200) + if ((typeof er.statusCode === 'number' && er.statusCode >= 400) || + /^TAR_/.test(er.code)) { return this.#clone(handler, false) } else { throw er