diff --git a/extensions/github/src/publish.ts b/extensions/github/src/publish.ts index b454969d49e..6926c421f9a 100644 --- a/extensions/github/src/publish.ts +++ b/extensions/github/src/publish.ts @@ -5,6 +5,8 @@ import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; +import * as path from 'path'; +import { promises as fs } from 'fs'; import { API as GitAPI, Repository } from './typings/git'; import { getOctokit } from './auth'; @@ -42,7 +44,7 @@ export async function publishRepository(gitAPI: GitAPI, repository?: Repository) folder = pick.folder; } - const quickpick = vscode.window.createQuickPick(); + let quickpick = vscode.window.createQuickPick(); quickpick.ignoreFocusOut = true; quickpick.placeholder = 'Repository Name'; @@ -95,6 +97,39 @@ export async function publishRepository(gitAPI: GitAPI, repository?: Repository) return; } + quickpick = vscode.window.createQuickPick(); + quickpick.placeholder = localize('ignore', "Select which files should be included in the repository."); + quickpick.canSelectMany = true; + quickpick.show(); + + try { + quickpick.busy = true; + + const repositoryPath = folder.uri.fsPath; + const currentPath = path.join(repositoryPath); + const children = await fs.readdir(currentPath); + quickpick.items = children.map(name => ({ label: name })); + quickpick.selectedItems = quickpick.items; + quickpick.busy = false; + + const result = await Promise.race([ + new Promise(c => quickpick.onDidAccept(() => c(quickpick.selectedItems))), + new Promise(c => quickpick.onDidHide(() => c(undefined))) + ]); + + if (!result) { + return; + } + + const ignored = new Set(children); + result.forEach(c => ignored.delete(c.label)); + + const raw = [...ignored].map(i => `/${i}`).join('\n'); + await fs.writeFile(path.join(repositoryPath, '.gitignore'), raw, 'utf8'); + } finally { + quickpick.dispose(); + } + const githubRepository = await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, cancellable: false, title: 'Publish to GitHub' }, async progress => { progress.report({ message: 'Publishing to GitHub private repository', increment: 25 });