From 9fd6ee7095e76a304556c06bbef16fc4f05cf697 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Fri, 19 Nov 2021 09:57:45 +0100 Subject: [PATCH] Fixes #73656: Do not activate extensions if the search for glob patterns from `workspaceContains` times out --- .../workbench/api/common/extHostExtensionService.ts | 1 + .../api/common/shared/workspaceContains.ts | 4 +++- .../services/extensions/browser/extensionService.ts | 9 +++++---- .../extensions/common/abstractExtensionService.ts | 2 ++ .../extensions/electron-browser/extensionService.ts | 13 +++++++------ 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/vs/workbench/api/common/extHostExtensionService.ts b/src/vs/workbench/api/common/extHostExtensionService.ts index 1352a3cec90..20723bacc66 100644 --- a/src/vs/workbench/api/common/extHostExtensionService.ts +++ b/src/vs/workbench/api/common/extHostExtensionService.ts @@ -551,6 +551,7 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme const localWithRemote = !this._initData.remote.isRemote && !!this._initData.remote.authority; const host: IExtensionActivationHost = { + logService: this._logService, folders: folders.map(folder => folder.uri), forceUsingSearch: localWithRemote, exists: (uri) => this._hostUtils.exists(uri.fsPath), diff --git a/src/vs/workbench/api/common/shared/workspaceContains.ts b/src/vs/workbench/api/common/shared/workspaceContains.ts index 74a283dce72..c9a1b852048 100644 --- a/src/vs/workbench/api/common/shared/workspaceContains.ts +++ b/src/vs/workbench/api/common/shared/workspaceContains.ts @@ -12,10 +12,12 @@ import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiati import { QueryBuilder } from 'vs/workbench/contrib/search/common/queryBuilder'; import { ISearchService } from 'vs/workbench/services/search/common/search'; import { toWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; +import { ILogService } from 'vs/platform/log/common/log'; const WORKSPACE_CONTAINS_TIMEOUT = 7000; export interface IExtensionActivationHost { + readonly logService: ILogService; readonly folders: readonly UriComponents[]; readonly forceUsingSearch: boolean; @@ -87,7 +89,7 @@ async function _activateIfGlobPatterns(host: IExtensionActivationHost, extension const timer = setTimeout(async () => { tokenSource.cancel(); - activate(`workspaceContainsTimeout:${globPatterns.join(',')}`); + host.logService.info(`Not activating extension '${extensionId.value}': Timed out while searching for 'workspaceContains' pattern ${globPatterns.join(',')}`); }, WORKSPACE_CONTAINS_TIMEOUT); let exists: boolean = false; diff --git a/src/vs/workbench/services/extensions/browser/extensionService.ts b/src/vs/workbench/services/extensions/browser/extensionService.ts index d82b437a7a2..bc46eaf51eb 100644 --- a/src/vs/workbench/services/extensions/browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/browser/extensionService.ts @@ -47,13 +47,13 @@ export class ExtensionService extends AbstractExtensionService implements IExten @IExtensionManagementService extensionManagementService: IExtensionManagementService, @IWorkspaceContextService contextService: IWorkspaceContextService, @IConfigurationService configurationService: IConfigurationService, + @IExtensionManifestPropertiesService extensionManifestPropertiesService: IExtensionManifestPropertiesService, + @IWebExtensionsScannerService webExtensionsScannerService: IWebExtensionsScannerService, + @ILogService logService: ILogService, @IRemoteAuthorityResolverService private readonly _remoteAuthorityResolverService: IRemoteAuthorityResolverService, @IRemoteAgentService private readonly _remoteAgentService: IRemoteAgentService, - @IWebExtensionsScannerService webExtensionsScannerService: IWebExtensionsScannerService, @ILifecycleService private readonly _lifecycleService: ILifecycleService, - @IExtensionManifestPropertiesService extensionManifestPropertiesService: IExtensionManifestPropertiesService, @IUserDataInitializationService private readonly _userDataInitializationService: IUserDataInitializationService, - @ILogService private readonly _logService: ILogService, ) { super( instantiationService, @@ -67,7 +67,8 @@ export class ExtensionService extends AbstractExtensionService implements IExten contextService, configurationService, extensionManifestPropertiesService, - webExtensionsScannerService + webExtensionsScannerService, + logService ); this._runningLocation = new Map(); diff --git a/src/vs/workbench/services/extensions/common/abstractExtensionService.ts b/src/vs/workbench/services/extensions/common/abstractExtensionService.ts index 71764d5a156..cf9b2bffa77 100644 --- a/src/vs/workbench/services/extensions/common/abstractExtensionService.ts +++ b/src/vs/workbench/services/extensions/common/abstractExtensionService.ts @@ -183,6 +183,7 @@ export abstract class AbstractExtensionService extends Disposable implements IEx @IConfigurationService protected readonly _configurationService: IConfigurationService, @IExtensionManifestPropertiesService protected readonly _extensionManifestPropertiesService: IExtensionManifestPropertiesService, @IWebExtensionsScannerService protected readonly _webExtensionsScannerService: IWebExtensionsScannerService, + @ILogService protected readonly _logService: ILogService, ) { super(); @@ -495,6 +496,7 @@ export abstract class AbstractExtensionService extends Disposable implements IEx const workspace = await this._contextService.getCompleteWorkspace(); const forceUsingSearch = !!this._environmentService.remoteAuthority; const host: IWorkspaceContainsActivationHost = { + logService: this._logService, folders: workspace.folders.map(folder => folder.uri), forceUsingSearch: forceUsingSearch, exists: (uri) => this._fileService.exists(uri), diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts index 57e16ae5c26..3da31508314 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts @@ -57,7 +57,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten constructor( @IInstantiationService instantiationService: IInstantiationService, @INotificationService notificationService: INotificationService, - @IWorkbenchEnvironmentService _environmentService: IWorkbenchEnvironmentService, + @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, @ITelemetryService telemetryService: ITelemetryService, @IWorkbenchExtensionEnablementService extensionEnablementService: IWorkbenchExtensionEnablementService, @IFileService fileService: IFileService, @@ -65,22 +65,22 @@ export class ExtensionService extends AbstractExtensionService implements IExten @IExtensionManagementService extensionManagementService: IExtensionManagementService, @IWorkspaceContextService contextService: IWorkspaceContextService, @IConfigurationService configurationService: IConfigurationService, + @IExtensionManifestPropertiesService extensionManifestPropertiesService: IExtensionManifestPropertiesService, + @IWebExtensionsScannerService webExtensionsScannerService: IWebExtensionsScannerService, + @ILogService logService: ILogService, @IRemoteAgentService private readonly _remoteAgentService: IRemoteAgentService, @IRemoteAuthorityResolverService private readonly _remoteAuthorityResolverService: IRemoteAuthorityResolverService, @ILifecycleService private readonly _lifecycleService: ILifecycleService, - @IWebExtensionsScannerService webExtensionsScannerService: IWebExtensionsScannerService, @INativeHostService private readonly _nativeHostService: INativeHostService, @IHostService private readonly _hostService: IHostService, @IRemoteExplorerService private readonly _remoteExplorerService: IRemoteExplorerService, @IExtensionGalleryService private readonly _extensionGalleryService: IExtensionGalleryService, - @ILogService private readonly _logService: ILogService, @IWorkspaceTrustManagementService private readonly _workspaceTrustManagementService: IWorkspaceTrustManagementService, - @IExtensionManifestPropertiesService extensionManifestPropertiesService: IExtensionManifestPropertiesService, ) { super( instantiationService, notificationService, - _environmentService, + environmentService, telemetryService, extensionEnablementService, fileService, @@ -89,7 +89,8 @@ export class ExtensionService extends AbstractExtensionService implements IExten contextService, configurationService, extensionManifestPropertiesService, - webExtensionsScannerService + webExtensionsScannerService, + logService ); [this._enableLocalWebWorker, this._lazyLocalWebWorker] = this._isLocalWebWorkerEnabled();