feat(git): Added remote url type option (#146124)

* feat(git): Added remote url type option

* Modify extension configuration

* Simplified code

Co-authored-by: Joao Moreno <joao.moreno@microsoft.com>
pull/144365/head
zz 2022-04-05 21:49:50 +08:00 committed by GitHub
parent 80f8b99e3c
commit a8097b5607
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 19 additions and 4 deletions

View File

@ -49,6 +49,15 @@
"scope": "resource",
"default": true,
"description": "%config.gitAuthentication%"
},
"github.gitProtocol": {
"type": "string",
"enum": [
"https",
"ssh"
],
"default": "https",
"description": "%config.gitProtocol%"
}
}
}

View File

@ -2,6 +2,7 @@
"displayName": "GitHub",
"description": "GitHub features for VS Code",
"config.gitAuthentication": "Controls whether to enable automatic GitHub authentication for git commands within VS Code.",
"config.gitProtocol": "Controls which protocol is used to clone a GitHub repository",
"welcome.publishFolder": "You can also directly publish this folder to a GitHub repository. Once published, you'll have access to source control features powered by git and GitHub.\n[$(github) Publish to GitHub](command:github.publish)",
"welcome.publishWorkspaceFolder": "You can also directly publish a workspace folder to a GitHub repository. Once published, you'll have access to source control features powered by git and GitHub.\n[$(github) Publish to GitHub](command:github.publish)"
}

View File

@ -53,4 +53,3 @@ export function getOctokit(): Promise<Octokit> {
return _octokit;
}

View File

@ -197,7 +197,9 @@ export async function publishRepository(gitAPI: GitAPI, repository?: Repository)
progress.report({ message: localize('publishing_uploading', "Uploading files"), increment: 25 });
const branch = await repository.getBranch('HEAD');
await repository.addRemote('origin', createdGithubRepository.clone_url);
const protocol = vscode.workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol');
const remoteUrl = protocol === 'https' ? createdGithubRepository.clone_url : createdGithubRepository.ssh_url;
await repository.addRemote('origin', remoteUrl);
await repository.push('origin', branch.name, true);
return createdGithubRepository;

View File

@ -73,7 +73,9 @@ async function handlePushError(repository: Repository, remote: Remote, refspec:
await repository.renameRemote(remote.name, 'upstream');
// Issue: what if there's already another `origin` repo?
await repository.addRemote('origin', ghRepository.clone_url);
const protocol = workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol');
const remoteUrl = protocol === 'https' ? ghRepository.clone_url : ghRepository.ssh_url;
await repository.addRemote('origin', remoteUrl);
try {
await repository.fetch('origin', remoteName);

View File

@ -3,6 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { workspace } from 'vscode';
import { RemoteSourceProvider, RemoteSource } from './typings/git-base';
import { getOctokit } from './auth';
import { Octokit } from '@octokit/rest';
@ -14,10 +15,11 @@ function parse(url: string): { owner: string; repo: string } | undefined {
}
function asRemoteSource(raw: any): RemoteSource {
const protocol = workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol');
return {
name: `$(github) ${raw.full_name}`,
description: raw.description || undefined,
url: raw.clone_url
url: protocol === 'https' ? raw.clone_url : raw.ssh_url
};
}