mirror of
https://github.com/Microsoft/vscode
synced 2024-10-12 06:17:18 +00:00
parent
feb3d2d205
commit
c4c4814a82
|
@ -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 [];
|
||||
}
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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];
|
||||
|
|
Loading…
Reference in a new issue