diff --git a/src/vs/code/electron-main/logUploader.ts b/src/vs/code/electron-main/logUploader.ts index 94280c83dcb..ce74d852eed 100644 --- a/src/vs/code/electron-main/logUploader.ts +++ b/src/vs/code/electron-main/logUploader.ts @@ -9,6 +9,7 @@ import * as os from 'os'; import * as cp from 'child_process'; import * as fs from 'fs'; import * as path from 'path'; +import * as readline from 'readline'; import { localize } from 'vs/nls'; import { ILaunchChannel } from 'vs/code/electron-main/launch'; @@ -16,8 +17,6 @@ import { TPromise } from 'vs/base/common/winjs.base'; import product from 'vs/platform/node/product'; import { IRequestService } from 'vs/platform/request/node/request'; import { IRequestContext } from 'vs/base/node/request'; -import { IChoiceService } from 'vs/platform/message/common/message'; -import Severity from 'vs/base/common/severity'; interface PostResult { readonly blob_id: string; @@ -36,8 +35,7 @@ class Endpoint { export async function uploadLogs( channel: ILaunchChannel, - requestService: IRequestService, - choiceService: IChoiceService + requestService: IRequestService ): TPromise { const endpoint = Endpoint.getFromProduct(); if (!endpoint) { @@ -47,7 +45,7 @@ export async function uploadLogs( const logsPath = await channel.call('get-logs-path', null); - if (await promptUserToConfirmLogUpload(logsPath, choiceService)) { + if (await promptUserToConfirmLogUpload(logsPath)) { console.log(localize('beginUploading', 'Uploading...')); const outZip = await zipLogs(logsPath); const result = await postLogs(endpoint, outZip, requestService); @@ -59,17 +57,23 @@ export async function uploadLogs( async function promptUserToConfirmLogUpload( logsPath: string, - choiceService: IChoiceService ): Promise { const message = localize('logUploadPromptHeader', 'Upload session logs to secure endpoint?') + '\n\n' + localize('logUploadPromptBody', 'Please review your log files here: \'{0}\'', logsPath) + '\n\n' + localize('logUploadPromptBodyDetails', 'Logs may contain personal information such as full paths and file contents.') - + '\n\n'; - const choice = await choiceService.choose(Severity.Info, message, [ - localize('logUploadPromptKey', 'I have reviewed my logs. Proceed with upload...'), - localize('logUploadPromptCancel', 'Cancel'), - ], 1); - return choice === 0; + + '\n\n' + localize('logUploadPromptKey', 'I have reviewed my logs (enter \'y\' to confirm upload)'); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + return new TPromise(resolve => + rl.question(message, + (answer: string) => { + rl.close(); + resolve(answer && answer.trim()[0].toLowerCase() === 'y'); + })); } async function postLogs( diff --git a/src/vs/code/electron-main/main.ts b/src/vs/code/electron-main/main.ts index 4cde51e4de3..8dd60aec8a2 100644 --- a/src/vs/code/electron-main/main.ts +++ b/src/vs/code/electron-main/main.ts @@ -109,7 +109,6 @@ function setupIPC(accessor: ServicesAccessor): TPromise { const logService = accessor.get(ILogService); const environmentService = accessor.get(IEnvironmentService); const requestService = accessor.get(IRequestService); - const choiceService = accessor.get(IChoiceService); function allowSetForegroundWindow(service: LaunchChannelClient): TPromise { let promise = TPromise.wrap(void 0); @@ -203,7 +202,7 @@ function setupIPC(accessor: ServicesAccessor): TPromise { // Log uploader if (environmentService.args['upload-logs']) { - return uploadLogs(channel, requestService, choiceService) + return uploadLogs(channel, requestService) .then(() => TPromise.wrapError(new ExpectedError())); } diff --git a/src/vs/code/node/cli.ts b/src/vs/code/node/cli.ts index 03b86b8c36d..ca0c7cdb8ab 100644 --- a/src/vs/code/node/cli.ts +++ b/src/vs/code/node/cli.ts @@ -123,7 +123,7 @@ export async function main(argv: string[]): TPromise { const processCallbacks: ((child: ChildProcess) => Thenable)[] = []; - const verbose = args.verbose || args.status; + const verbose = args.verbose || args.status || args['upload-logs']; if (verbose) { env['ELECTRON_ENABLE_LOGGING'] = '1'; @@ -311,7 +311,9 @@ export async function main(argv: string[]): TPromise { env }; - if (!verbose) { + if (args['upload-logs']) { + options['stdio'] = [process.stdin, 'pipe', 'pipe']; + } else if (!verbose) { options['stdio'] = 'ignore'; }