diff --git a/src/vs/code/electron-browser/issue/issueReporterMain.ts b/src/vs/code/electron-browser/issue/issueReporterMain.ts index 2d09466d9bb..90767e1a856 100644 --- a/src/vs/code/electron-browser/issue/issueReporterMain.ts +++ b/src/vs/code/electron-browser/issue/issueReporterMain.ts @@ -40,7 +40,7 @@ import { OcticonLabel } from 'vs/base/browser/ui/octiconLabel/octiconLabel'; import { normalizeGitHubUrl } from 'vs/code/electron-browser/issue/issueReporterUtil'; import { Button } from 'vs/base/browser/ui/button/button'; import { withUndefinedAsNull } from 'vs/base/common/types'; -import { SystemInfo } from 'vs/platform/diagnostics/common/diagnosticsService'; +import { SystemInfo, isRemoteDiagnosticError } from 'vs/platform/diagnostics/common/diagnosticsService'; const MAX_URL_LENGTH = platform.isWindows ? 2081 : 5400; @@ -938,15 +938,24 @@ export class IssueReporter extends Disposable { `; systemInfo.remoteData.forEach(remote => { - renderedData += ` -
- - - - - - -
Remote${remote.hostName}
OS${remote.machineInfo.os}
CPUs${remote.machineInfo.cpus}
Memory (System)${remote.machineInfo.memory}
VM${remote.machineInfo.vmHint}
`; + if (isRemoteDiagnosticError(remote)) { + renderedData += ` +
+ + + +
Remote${remote.hostName}
${remote.errorMessage}
`; + } else { + renderedData += ` +
+ + + + + + +
Remote${remote.hostName}
OS${remote.machineInfo.os}
CPUs${remote.machineInfo.cpus}
Memory (System)${remote.machineInfo.memory}
VM${remote.machineInfo.vmHint}
`; + } }); target.innerHTML = renderedData; diff --git a/src/vs/code/electron-browser/issue/issueReporterModel.ts b/src/vs/code/electron-browser/issue/issueReporterModel.ts index b4158cf6bb4..c1f78969153 100644 --- a/src/vs/code/electron-browser/issue/issueReporterModel.ts +++ b/src/vs/code/electron-browser/issue/issueReporterModel.ts @@ -5,7 +5,7 @@ import { assign } from 'vs/base/common/objects'; import { IssueType, ISettingSearchResult, IssueReporterExtensionData } from 'vs/platform/issue/common/issue'; -import { SystemInfo } from 'vs/platform/diagnostics/common/diagnosticsService'; +import { SystemInfo, isRemoteDiagnosticError } from 'vs/platform/diagnostics/common/diagnosticsService'; export interface IssueReporterData { issueType: IssueType; @@ -75,7 +75,8 @@ ${this.getInfos()} private getRemoteOSes(): string { if (this._data.systemInfo && this._data.systemInfo.remoteData.length) { - return this._data.systemInfo.remoteData.map(remote => `Remote OS version: ${remote.machineInfo.os}`).join('\n') + '\n'; + return this._data.systemInfo.remoteData + .map(remote => isRemoteDiagnosticError(remote) ? remote.errorMessage : `Remote OS version: ${remote.machineInfo.os}`).join('\n') + '\n'; } return ''; @@ -168,7 +169,10 @@ ${this.getInfos()} |VM|${this._data.systemInfo.vmHint}|`; this._data.systemInfo.remoteData.forEach(remote => { - md += ` + if (isRemoteDiagnosticError(remote)) { + md += `\n\n${remote.errorMessage}`; + } else { + md += ` |Item|Value| |---|---| @@ -177,6 +181,7 @@ ${this.getInfos()} |CPUs|${remote.machineInfo.cpus}| |Memory (System)|${remote.machineInfo.memory}| |VM|${remote.machineInfo.vmHint}|`; + } }); } diff --git a/src/vs/platform/diagnostics/common/diagnosticsService.ts b/src/vs/platform/diagnostics/common/diagnosticsService.ts index d8d2ed70420..21cd8952e13 100644 --- a/src/vs/platform/diagnostics/common/diagnosticsService.ts +++ b/src/vs/platform/diagnostics/common/diagnosticsService.ts @@ -22,7 +22,7 @@ export interface SystemInfo extends IMachineInfo { processArgs: string; gpuStatus: any; screenReader: string; - remoteData: IRemoteDiagnosticInfo[]; + remoteData: (IRemoteDiagnosticInfo | IRemoteDiagnosticError)[]; load?: string; } diff --git a/src/vs/workbench/services/extensions/node/multiExtensionManagement.ts b/src/vs/workbench/services/extensions/node/multiExtensionManagement.ts index 5d9270a6e6b..c430a811ac5 100644 --- a/src/vs/workbench/services/extensions/node/multiExtensionManagement.ts +++ b/src/vs/workbench/services/extensions/node/multiExtensionManagement.ts @@ -8,7 +8,6 @@ import { IExtensionManagementService, ILocalExtension, IGalleryExtension, InstallExtensionEvent, DidInstallExtensionEvent, IExtensionIdentifier, DidUninstallExtensionEvent, IReportedExtension, IGalleryMetadata, IExtensionManagementServerService, IExtensionManagementServer, IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { flatten } from 'vs/base/common/arrays'; import { ExtensionType, IExtensionManifest, isLanguagePackExtension } from 'vs/platform/extensions/common/extensions'; import { URI } from 'vs/base/common/uri'; import { Disposable } from 'vs/base/common/lifecycle'; @@ -46,8 +45,10 @@ export class MultiExtensionManagementService extends Disposable implements IExte } getInstalled(type?: ExtensionType): Promise { - return Promise.all(this.servers.map(({ extensionManagementService }) => extensionManagementService.getInstalled(type))) - .then(result => flatten(result)); + const installedExtensions: ILocalExtension[] = []; + return Promise.all(this.servers.map(({ extensionManagementService }) => extensionManagementService.getInstalled(type).then(extensions => installedExtensions.push(...extensions)))) + .then(_ => installedExtensions) + .catch(e => installedExtensions); } async uninstall(extension: ILocalExtension, force?: boolean): Promise {