diff --git a/src/resolvers/exotics/bitbucket-resolver.js b/src/resolvers/exotics/bitbucket-resolver.js index 39e1beed32..4805058e21 100644 --- a/src/resolvers/exotics/bitbucket-resolver.js +++ b/src/resolvers/exotics/bitbucket-resolver.js @@ -16,6 +16,10 @@ export default class BitbucketResolver extends HostedGitResolver { } static getGitSSHUrl(parts: ExplodedFragment): string { + return `git+ssh://git@bitbucket.org/${ parts.user }/${ parts.repo }.git`; + } + + static getGitSSH(parts: ExplodedFragment): string { return `git@bitbucket.org:${parts.user}/${parts.repo}.git`; } diff --git a/src/resolvers/exotics/github-resolver.js b/src/resolvers/exotics/github-resolver.js index 386c8dd03f..cebc4ee75d 100644 --- a/src/resolvers/exotics/github-resolver.js +++ b/src/resolvers/exotics/github-resolver.js @@ -26,6 +26,10 @@ export default class GitHubResolver extends HostedGitResolver { } static getGitSSHUrl(parts: ExplodedFragment): string { + return `git+ssh://git@github.com/${ parts.user }/${ parts.repo }.git`; + } + + static getGitSSH(parts: ExplodedFragment): string { return `git@github.com:${parts.user}/${parts.repo}.git`; } diff --git a/src/resolvers/exotics/gitlab-resolver.js b/src/resolvers/exotics/gitlab-resolver.js index dd94a08fcf..9aa25a01a4 100644 --- a/src/resolvers/exotics/gitlab-resolver.js +++ b/src/resolvers/exotics/gitlab-resolver.js @@ -16,6 +16,10 @@ export default class GitLabResolver extends HostedGitResolver { } static getGitSSHUrl(parts: ExplodedFragment): string { + return `git+ssh://git@gitlab.com/${ parts.user }/${ parts.repo }.git`; + } + + static getGitSSH(parts: ExplodedFragment): string { return `git@gitlab.com:${parts.user}/${parts.repo}.git`; } diff --git a/src/resolvers/exotics/hosted-git-resolver.js b/src/resolvers/exotics/hosted-git-resolver.js index 35e3175e25..61d5e6b19d 100644 --- a/src/resolvers/exotics/hosted-git-resolver.js +++ b/src/resolvers/exotics/hosted-git-resolver.js @@ -71,6 +71,11 @@ export default class HostedGitResolver extends ExoticResolver { throw new Error('Not implemented'); } + static getGitSSH(exploded: ExplodedFragment): string { + exploded; + throw new Error('Not implemented'); + } + static getHTTPFileUrl(exploded: ExplodedFragment, filename: string, commit: string) { exploded; filename; @@ -167,14 +172,15 @@ export default class HostedGitResolver extends ExoticResolver { } async resolve(): Promise { - const httpUrl = this.constructor.getGitHTTPUrl(this.exploded); - const sshUrl = this.constructor.getGitSSHUrl(this.exploded); + const gitHTTPUrl = this.constructor.getGitHTTPUrl(this.exploded); + const gitSSHUrl = this.constructor.getGitSSHUrl(this.exploded); + const gitSSH = this.constructor.getGitSSH(this.exploded); // If we can access the files over HTTP then we should as it's MUCH faster than git // archive and tarball unarchiving. The HTTP API is only available for public repos // though. - if (await this.hasHTTPCapability(httpUrl)) { - return await this.resolveOverHTTP(httpUrl); + if (await this.hasHTTPCapability(gitHTTPUrl)) { + return await this.resolveOverHTTP(gitHTTPUrl); } // If the url is accessible over git archive then we should immediately delegate to @@ -183,13 +189,13 @@ export default class HostedGitResolver extends ExoticResolver { // NOTE: Here we use a different url than when we delegate to the git resolver later on. // This is because `git archive` requires access over ssh and github only allows that // if you have write permissions - if (await Git.hasArchiveCapability(sshUrl)) { - const archiveClient = new Git(this.config, sshUrl, this.hash); + if (await Git.hasArchiveCapability(gitSSH)) { + const archiveClient = new Git(this.config, gitSSH, this.hash); const commit = await archiveClient.initRemote(); - return await this.fork(GitResolver, true, `${sshUrl}#${commit}`); + return await this.fork(GitResolver, true, `${gitSSH}#${commit}`); } - // fallback to the plain git resolver - return await this.fork(GitResolver, true, sshUrl); + // fallback to the plain git resolver (and append the hash only if has one) + return await this.fork(GitResolver, true, `${gitSSHUrl}${this.hash ? `#${this.hash}` : ''}`); } }