Skip to content

Commit 9e8df9f

Browse files
authored
1 parent d607e9d commit 9e8df9f

File tree

3 files changed

+69
-73
lines changed

3 files changed

+69
-73
lines changed

src/vs/server/node/remoteExtensionsScanner.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ export class RemoteExtensionsScannerService implements IRemoteExtensionsScannerS
2828

2929
readonly _serviceBrand: undefined;
3030

31-
private readonly _whenExtensionsReady: Promise<void>;
31+
private readonly _whenBuiltinExtensionsReady = Promise.resolve();
32+
private readonly _whenExtensionsReady = Promise.resolve();
3233

3334
constructor(
3435
private readonly _extensionManagementCLI: ExtensionManagementCLI,
@@ -44,21 +45,19 @@ export class RemoteExtensionsScannerService implements IRemoteExtensionsScannerS
4445
_logService.trace('Installing builtin extensions passed via args...');
4546
const installOptions: InstallOptions = { isMachineScoped: !!environmentService.args['do-not-sync'], installPreReleaseVersion: !!environmentService.args['pre-release'] };
4647
performance.mark('code/server/willInstallBuiltinExtensions');
47-
this._whenExtensionsReady = _extensionManagementCLI.installExtensions([], this._asExtensionIdOrVSIX(builtinExtensionsToInstall), installOptions, !!environmentService.args['force'])
48+
this._whenExtensionsReady = this._whenBuiltinExtensionsReady = _extensionManagementCLI.installExtensions([], this._asExtensionIdOrVSIX(builtinExtensionsToInstall), installOptions, !!environmentService.args['force'])
4849
.then(() => {
4950
performance.mark('code/server/didInstallBuiltinExtensions');
5051
_logService.trace('Finished installing builtin extensions');
5152
}, error => {
5253
_logService.error(error);
5354
});
54-
} else {
55-
this._whenExtensionsReady = Promise.resolve();
5655
}
5756

5857
const extensionsToInstall = environmentService.args['install-extension'];
5958
if (extensionsToInstall) {
6059
_logService.trace('Installing extensions passed via args...');
61-
this._whenExtensionsReady
60+
this._whenExtensionsReady = this._whenBuiltinExtensionsReady
6261
.then(() => _extensionManagementCLI.installExtensions(this._asExtensionIdOrVSIX(extensionsToInstall), [], {
6362
isMachineScoped: !!environmentService.args['do-not-sync'],
6463
installPreReleaseVersion: !!environmentService.args['pre-release'],
@@ -84,7 +83,7 @@ export class RemoteExtensionsScannerService implements IRemoteExtensionsScannerS
8483
performance.mark('code/server/willScanExtensions');
8584
this._logService.trace(`Scanning extensions using UI language: ${language}`);
8685

87-
await this.whenExtensionsReady();
86+
await this._whenBuiltinExtensionsReady;
8887

8988
const extensionDevelopmentPaths = extensionDevelopmentLocations ? extensionDevelopmentLocations.filter(url => url.scheme === Schemas.file).map(url => url.fsPath) : undefined;
9089
profileLocation = profileLocation ?? this._userDataProfilesService.defaultProfile.extensionsResource;
@@ -99,7 +98,7 @@ export class RemoteExtensionsScannerService implements IRemoteExtensionsScannerS
9998
}
10099

101100
async scanSingleExtension(extensionLocation: URI, isBuiltin: boolean, language?: string): Promise<IExtensionDescription | null> {
102-
await this.whenExtensionsReady();
101+
await this._whenBuiltinExtensionsReady;
103102

104103
const extensionPath = extensionLocation.scheme === Schemas.file ? extensionLocation.fsPath : null;
105104

src/vs/workbench/contrib/extensions/browser/extensionRecommendationsService.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import { WebRecommendations } from 'vs/workbench/contrib/extensions/browser/webR
2626
import { IExtensionsWorkbenchService } from 'vs/workbench/contrib/extensions/common/extensions';
2727
import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
2828
import { RemoteRecommendations } from 'vs/workbench/contrib/extensions/browser/remoteRecommendations';
29+
import { IRemoteExtensionsScannerService } from 'vs/platform/remote/common/remoteExtensionsScanner';
30+
import { IUserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit';
2931

3032
type IgnoreRecommendationClassification = {
3133
owner: 'sandy081';
@@ -64,6 +66,8 @@ export class ExtensionRecommendationsService extends Disposable implements IExte
6466
@IExtensionIgnoredRecommendationsService private readonly extensionRecommendationsManagementService: IExtensionIgnoredRecommendationsService,
6567
@IExtensionRecommendationNotificationService private readonly extensionRecommendationNotificationService: IExtensionRecommendationNotificationService,
6668
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
69+
@IRemoteExtensionsScannerService private readonly remoteExtensionsScannerService: IRemoteExtensionsScannerService,
70+
@IUserDataInitializationService private readonly userDataInitializationService: IUserDataInitializationService,
6771
) {
6872
super();
6973

@@ -91,7 +95,12 @@ export class ExtensionRecommendationsService extends Disposable implements IExte
9195
}
9296

9397
private async activate(): Promise<void> {
94-
await this.lifecycleService.when(LifecyclePhase.Restored);
98+
try {
99+
await Promise.allSettled([
100+
this.remoteExtensionsScannerService.whenExtensionsReady(),
101+
this.userDataInitializationService.whenInitializationFinished(),
102+
this.lifecycleService.when(LifecyclePhase.Restored)]);
103+
} catch (error) { /* ignore */ }
95104

96105
// activate all recommendations
97106
await Promise.all([
@@ -256,12 +265,6 @@ export class ExtensionRecommendationsService extends Disposable implements IExte
256265
return !this.extensionRecommendationsManagementService.ignoredRecommendations.includes(extensionId.toLowerCase());
257266
}
258267

259-
// for testing
260-
protected get workbenchRecommendationDelay() {
261-
// remote extensions might still being installed #124119
262-
return 5000;
263-
}
264-
265268
private async promptWorkspaceRecommendations(): Promise<void> {
266269
const installed = await this.extensionsWorkbenchService.queryLocal();
267270
const allowedRecommendations = [
@@ -273,7 +276,7 @@ export class ExtensionRecommendationsService extends Disposable implements IExte
273276
.filter(extensionId => this.isExtensionAllowedToBeRecommended(extensionId));
274277

275278
if (allowedRecommendations.length) {
276-
await timeout(this.workbenchRecommendationDelay);
279+
await timeout(5000);
277280
await this.extensionRecommendationNotificationService.promptWorkspaceRecommendations(allowedRecommendations);
278281
}
279282
}

0 commit comments

Comments
 (0)