Skip to content

Commit c4c4814

Browse files
authored
1 parent feb3d2d commit c4c4814

File tree

3 files changed

+26
-15
lines changed

3 files changed

+26
-15
lines changed

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,25 +1587,26 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
15871587
for (const extension of toCheck) {
15881588
checked.push(extension);
15891589
}
1590-
const extensionsToDisable = installed.filter(i => {
1590+
const extensionsToEanbleOrDisable = installed.filter(i => {
15911591
if (checked.indexOf(i) !== -1) {
15921592
return false;
15931593
}
1594-
if (i.enablementState === enablementState) {
1594+
const enable = enablementState === EnablementState.EnabledGlobally || enablementState === EnablementState.EnabledWorkspace;
1595+
const isExtensionEnabled = i.enablementState === EnablementState.EnabledGlobally || i.enablementState === EnablementState.EnabledWorkspace;
1596+
if (enable === isExtensionEnabled) {
15951597
return false;
15961598
}
1597-
const enable = enablementState === EnablementState.EnabledGlobally || enablementState === EnablementState.EnabledWorkspace;
15981599
return (enable || !i.isBuiltin) // Include all Extensions for enablement and only non builtin extensions for disablement
15991600
&& (options.dependencies || options.pack)
16001601
&& extensions.some(extension =>
16011602
(options.dependencies && extension.dependencies.some(id => areSameExtensions({ id }, i.identifier)))
16021603
|| (options.pack && extension.extensionPack.some(id => areSameExtensions({ id }, i.identifier)))
16031604
);
16041605
});
1605-
if (extensionsToDisable.length) {
1606-
extensionsToDisable.push(...this.getExtensionsRecursively(extensionsToDisable, installed, enablementState, options, checked));
1606+
if (extensionsToEanbleOrDisable.length) {
1607+
extensionsToEanbleOrDisable.push(...this.getExtensionsRecursively(extensionsToEanbleOrDisable, installed, enablementState, options, checked));
16071608
}
1608-
return extensionsToDisable;
1609+
return extensionsToEanbleOrDisable;
16091610
}
16101611
return [];
16111612
}

src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -236,16 +236,16 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
236236
checked.push(extension);
237237
}
238238

239-
const extensionsToDisable: IExtension[] = [];
239+
const extensionsToEnable: IExtension[] = [];
240240
for (const extension of allExtensions) {
241241
// Extension is already checked
242242
if (checked.some(e => areSameExtensions(e.identifier, extension.identifier))) {
243243
continue;
244244
}
245245

246246
const enablementStateOfExtension = this.getEnablementState(extension);
247-
// Extension enablement state is same as the end enablement state
248-
if (enablementStateOfExtension === enablementState) {
247+
// Extension is enabled
248+
if (this.isEnabledEnablementState(enablementStateOfExtension)) {
249249
continue;
250250
}
251251

@@ -254,29 +254,29 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
254254
(options.dependencies && e.manifest.extensionDependencies?.some(id => areSameExtensions({ id }, extension.identifier)))
255255
|| (options.pack && e.manifest.extensionPack?.some(id => areSameExtensions({ id }, extension.identifier))))) {
256256

257-
const index = extensionsToDisable.findIndex(e => areSameExtensions(e.identifier, extension.identifier));
257+
const index = extensionsToEnable.findIndex(e => areSameExtensions(e.identifier, extension.identifier));
258258

259259
// Extension is not aded to the disablement list so add it
260260
if (index === -1) {
261-
extensionsToDisable.push(extension);
261+
extensionsToEnable.push(extension);
262262
}
263263

264264
// Extension is there already in the disablement list.
265265
else {
266266
try {
267267
// Replace only if the enablement state can be changed
268268
this.throwErrorIfEnablementStateCannotBeChanged(extension, enablementStateOfExtension, true);
269-
extensionsToDisable.splice(index, 1, extension);
269+
extensionsToEnable.splice(index, 1, extension);
270270
} catch (error) { /*Do not add*/ }
271271
}
272272
}
273273
}
274274

275-
if (extensionsToDisable.length) {
276-
extensionsToDisable.push(...this.getExtensionsToEnableRecursively(extensionsToDisable, allExtensions, enablementState, options, checked));
275+
if (extensionsToEnable.length) {
276+
extensionsToEnable.push(...this.getExtensionsToEnableRecursively(extensionsToEnable, allExtensions, enablementState, options, checked));
277277
}
278278

279-
return extensionsToDisable;
279+
return extensionsToEnable;
280280
}
281281

282282
private _setUserEnablementState(extension: IExtension, newState: EnablementState): Promise<boolean> {

src/vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,16 @@ suite('ExtensionEnablementService Test', () => {
402402
assert.strictEqual(testObject.getEnablementState(dep), EnablementState.EnabledGlobally);
403403
});
404404

405+
test('test enable an extension in workspace with a dependency extension that has auth providers', async () => {
406+
installed.push(...[aLocalExtension2('pub.a', { extensionDependencies: ['pub.b'] }), aLocalExtension('pub.b', { authentication: [{ id: 'a', label: 'a' }] })]);
407+
const target = installed[0];
408+
await (<TestExtensionEnablementService>testObject).waitUntilInitialized();
409+
await testObject.setEnablement([target], EnablementState.DisabledWorkspace);
410+
await testObject.setEnablement([target], EnablementState.EnabledWorkspace);
411+
assert.ok(testObject.isEnabled(target));
412+
assert.strictEqual(testObject.getEnablementState(target), EnablementState.EnabledWorkspace);
413+
});
414+
405415
test('test enable an extension also enables packed extensions', async () => {
406416
installed.push(...[aLocalExtension2('pub.a', { extensionPack: ['pub.b'] }), aLocalExtension('pub.b')]);
407417
const target = installed[0];

0 commit comments

Comments
 (0)