This commit is contained in:
Sandeep Somavarapu 2022-09-29 22:16:36 +02:00 committed by GitHub
parent feb3d2d205
commit c4c4814a82
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 15 deletions

View file

@ -1587,14 +1587,15 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
for (const extension of toCheck) {
checked.push(extension);
}
const extensionsToDisable = installed.filter(i => {
const extensionsToEanbleOrDisable = installed.filter(i => {
if (checked.indexOf(i) !== -1) {
return false;
}
if (i.enablementState === enablementState) {
const enable = enablementState === EnablementState.EnabledGlobally || enablementState === EnablementState.EnabledWorkspace;
const isExtensionEnabled = i.enablementState === EnablementState.EnabledGlobally || i.enablementState === EnablementState.EnabledWorkspace;
if (enable === isExtensionEnabled) {
return false;
}
const enable = enablementState === EnablementState.EnabledGlobally || enablementState === EnablementState.EnabledWorkspace;
return (enable || !i.isBuiltin) // Include all Extensions for enablement and only non builtin extensions for disablement
&& (options.dependencies || options.pack)
&& extensions.some(extension =>
@ -1602,10 +1603,10 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
|| (options.pack && extension.extensionPack.some(id => areSameExtensions({ id }, i.identifier)))
);
});
if (extensionsToDisable.length) {
extensionsToDisable.push(...this.getExtensionsRecursively(extensionsToDisable, installed, enablementState, options, checked));
if (extensionsToEanbleOrDisable.length) {
extensionsToEanbleOrDisable.push(...this.getExtensionsRecursively(extensionsToEanbleOrDisable, installed, enablementState, options, checked));
}
return extensionsToDisable;
return extensionsToEanbleOrDisable;
}
return [];
}

View file

@ -236,7 +236,7 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
checked.push(extension);
}
const extensionsToDisable: IExtension[] = [];
const extensionsToEnable: IExtension[] = [];
for (const extension of allExtensions) {
// Extension is already checked
if (checked.some(e => areSameExtensions(e.identifier, extension.identifier))) {
@ -244,8 +244,8 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
}
const enablementStateOfExtension = this.getEnablementState(extension);
// Extension enablement state is same as the end enablement state
if (enablementStateOfExtension === enablementState) {
// Extension is enabled
if (this.isEnabledEnablementState(enablementStateOfExtension)) {
continue;
}
@ -254,11 +254,11 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
(options.dependencies && e.manifest.extensionDependencies?.some(id => areSameExtensions({ id }, extension.identifier)))
|| (options.pack && e.manifest.extensionPack?.some(id => areSameExtensions({ id }, extension.identifier))))) {
const index = extensionsToDisable.findIndex(e => areSameExtensions(e.identifier, extension.identifier));
const index = extensionsToEnable.findIndex(e => areSameExtensions(e.identifier, extension.identifier));
// Extension is not aded to the disablement list so add it
if (index === -1) {
extensionsToDisable.push(extension);
extensionsToEnable.push(extension);
}
// Extension is there already in the disablement list.
@ -266,17 +266,17 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
try {
// Replace only if the enablement state can be changed
this.throwErrorIfEnablementStateCannotBeChanged(extension, enablementStateOfExtension, true);
extensionsToDisable.splice(index, 1, extension);
extensionsToEnable.splice(index, 1, extension);
} catch (error) { /*Do not add*/ }
}
}
}
if (extensionsToDisable.length) {
extensionsToDisable.push(...this.getExtensionsToEnableRecursively(extensionsToDisable, allExtensions, enablementState, options, checked));
if (extensionsToEnable.length) {
extensionsToEnable.push(...this.getExtensionsToEnableRecursively(extensionsToEnable, allExtensions, enablementState, options, checked));
}
return extensionsToDisable;
return extensionsToEnable;
}
private _setUserEnablementState(extension: IExtension, newState: EnablementState): Promise<boolean> {

View file

@ -402,6 +402,16 @@ suite('ExtensionEnablementService Test', () => {
assert.strictEqual(testObject.getEnablementState(dep), EnablementState.EnabledGlobally);
});
test('test enable an extension in workspace with a dependency extension that has auth providers', async () => {
installed.push(...[aLocalExtension2('pub.a', { extensionDependencies: ['pub.b'] }), aLocalExtension('pub.b', { authentication: [{ id: 'a', label: 'a' }] })]);
const target = installed[0];
await (<TestExtensionEnablementService>testObject).waitUntilInitialized();
await testObject.setEnablement([target], EnablementState.DisabledWorkspace);
await testObject.setEnablement([target], EnablementState.EnabledWorkspace);
assert.ok(testObject.isEnabled(target));
assert.strictEqual(testObject.getEnablementState(target), EnablementState.EnabledWorkspace);
});
test('test enable an extension also enables packed extensions', async () => {
installed.push(...[aLocalExtension2('pub.a', { extensionPack: ['pub.b'] }), aLocalExtension('pub.b')]);
const target = installed[0];