From 63d49f6a135fcc1c8cc909f80402e61087ce8509 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 18 Dec 2020 10:03:18 +0100 Subject: [PATCH] don't disable the current remote resolve when bisect'ing extensions, fixes https://github.com/microsoft/vscode/issues/112473 --- .../browser/extensionBisect.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/vs/workbench/services/extensionManagement/browser/extensionBisect.ts b/src/vs/workbench/services/extensionManagement/browser/extensionBisect.ts index a344e1a5678..b60cd526762 100644 --- a/src/vs/workbench/services/extensionManagement/browser/extensionBisect.ts +++ b/src/vs/workbench/services/extensionManagement/browser/extensionBisect.ts @@ -21,6 +21,7 @@ import { ICommandService } from 'vs/platform/commands/common/commands'; import { ILogService } from 'vs/platform/log/common/log'; import { IProductService } from 'vs/platform/product/common/productService'; import { IWorkbenchIssueService } from 'vs/workbench/services/issue/common/issue'; +import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; // --- bisect service @@ -73,6 +74,7 @@ class ExtensionBisectService implements IExtensionBisectService { constructor( @ILogService logService: ILogService, @IStorageService private readonly _storageService: IStorageService, + @IWorkbenchEnvironmentService private readonly _envService: IWorkbenchEnvironmentService ) { const raw = _storageService.get(ExtensionBisectService._storageKey, StorageScope.GLOBAL); this._state = BisectState.fromJSON(raw); @@ -97,12 +99,26 @@ class ExtensionBisectService implements IExtensionBisectService { isDisabledByBisect(extension: IExtension): boolean { if (!this._state) { + // bisect isn't active + return false; + } + if (this._isRemoteResolver(extension)) { + // the current remote resolver extension cannot be disabled return false; } const disabled = this._disabled.get(extension.identifier.id); return disabled ?? false; } + private _isRemoteResolver(extension: IExtension): boolean { + if (extension.manifest.enableProposedApi !== true) { + return false; + } + const idx = this._envService.remoteAuthority?.indexOf('+'); + const activationEvent = `onResolveRemoteAuthority:${this._envService.remoteAuthority?.substr(0, idx)}`; + return Boolean(extension.manifest.activationEvents?.find(e => e === activationEvent)); + } + async start(extensions: ILocalExtension[]): Promise { if (this._state) { throw new Error('invalid state');