mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 21:55:38 +00:00
#55055 Disable or uninstall only pack extensions but not dependencies
This commit is contained in:
parent
d86306d665
commit
052cd3cecb
|
@ -538,14 +538,19 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
|||
private checkForDependenciesAndUninstall(extension: ILocalExtension, installed: ILocalExtension[], force: boolean): TPromise<void> {
|
||||
return this.preUninstallExtension(extension)
|
||||
.then(() => {
|
||||
if (force) {
|
||||
return this.uninstallExtensionWithDependenciesAndPacked(extension, installed);
|
||||
const packedExtensions = this.getAllPackExtensionsToUninstall(extension, installed);
|
||||
if (packedExtensions.length) {
|
||||
return this.uninstallExtensions(extension, packedExtensions, installed);
|
||||
}
|
||||
const dependencies = this.getDependenciesToUninstall(extension, installed);
|
||||
if (dependencies.length) {
|
||||
return this.promptForDependenciesAndUninstall(extension, installed);
|
||||
if (force) {
|
||||
return this.uninstallExtensions(extension, dependencies, installed);
|
||||
} else {
|
||||
return this.promptForDependenciesAndUninstall(extension, dependencies, installed);
|
||||
}
|
||||
} else {
|
||||
return this.uninstallExtensionWithDependenciesAndPacked(extension, installed);
|
||||
return this.uninstallExtensions(extension, [], installed);
|
||||
}
|
||||
})
|
||||
.then(() => this.postUninstallExtension(extension),
|
||||
|
@ -555,7 +560,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
|||
});
|
||||
}
|
||||
|
||||
private promptForDependenciesAndUninstall(extension: ILocalExtension, installed: ILocalExtension[]): TPromise<void> {
|
||||
private promptForDependenciesAndUninstall(extension: ILocalExtension, dependencies: ILocalExtension[], installed: ILocalExtension[]): TPromise<void> {
|
||||
const message = nls.localize('uninstallDependeciesConfirmation', "Would you like to uninstall '{0}' only or its dependencies also?", extension.manifest.displayName || extension.manifest.name);
|
||||
const buttons = [
|
||||
nls.localize('uninstallOnly', "Extension Only"),
|
||||
|
@ -568,23 +573,13 @@ export class ExtensionManagementService extends Disposable implements IExtension
|
|||
return this.uninstallExtensions(extension, [], installed);
|
||||
}
|
||||
if (value === 1) {
|
||||
return this.uninstallExtensionWithDependenciesAndPacked(extension, installed);
|
||||
return this.uninstallExtensions(extension, dependencies, installed);
|
||||
}
|
||||
this.logService.info('Cancelled uninstalling extension:', extension.identifier.id);
|
||||
return TPromise.wrapError(errors.canceled());
|
||||
}, error => TPromise.wrapError(errors.canceled()));
|
||||
}
|
||||
|
||||
private uninstallExtensionWithDependenciesAndPacked(extension: ILocalExtension, installed: ILocalExtension[]): TPromise<void> {
|
||||
const extensionsToUninstall = this.getDependenciesToUninstall(extension, installed);
|
||||
for (const packExtensionToUninstall of this.getAllPackExtensionsToUninstall(extension, installed)) {
|
||||
if (extensionsToUninstall.indexOf(packExtensionToUninstall) === -1) {
|
||||
extensionsToUninstall.push(packExtensionToUninstall);
|
||||
}
|
||||
}
|
||||
return this.uninstallExtensions(extension, extensionsToUninstall, installed);
|
||||
}
|
||||
|
||||
private uninstallExtensions(extension: ILocalExtension, otherExtensionsToUninstall: ILocalExtension[], installed: ILocalExtension[]): TPromise<void> {
|
||||
const dependents = this.getDependents(extension, installed);
|
||||
if (dependents.length) {
|
||||
|
|
|
@ -744,18 +744,23 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService,
|
|||
private promptAndSetEnablement(extensions: IExtension[], enablementState: EnablementState): TPromise<any> {
|
||||
const enable = enablementState === EnablementState.Enabled || enablementState === EnablementState.WorkspaceEnabled;
|
||||
if (enable) {
|
||||
return this.checkAndSetEnablementWithDependenciesAndPacked(extensions, enablementState);
|
||||
const allDependenciesAndPackedExtensions = this.getExtensionsRecursively(extensions, this.local, enablementState, { dependencies: true, pack: true });
|
||||
return this.checkAndSetEnablement(extensions, allDependenciesAndPackedExtensions, enablementState);
|
||||
} else {
|
||||
const packedExtensions = this.getExtensionsRecursively(extensions, this.local, enablementState, { dependencies: false, pack: true });
|
||||
if (packedExtensions.length) {
|
||||
return this.checkAndSetEnablement(extensions, packedExtensions, enablementState);
|
||||
}
|
||||
const dependencies = this.getExtensionsRecursively(extensions, this.local, enablementState, { dependencies: true, pack: false });
|
||||
if (dependencies.length) {
|
||||
return this.promptForDependenciesAndDisable(extensions, enablementState);
|
||||
return this.promptForDependenciesAndDisable(extensions, dependencies, enablementState);
|
||||
} else {
|
||||
return this.checkAndSetEnablementWithDependenciesAndPacked(extensions, enablementState);
|
||||
return this.checkAndSetEnablement(extensions, [], enablementState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private promptForDependenciesAndDisable(extensions: IExtension[], enablementState: EnablementState): TPromise<void> {
|
||||
private promptForDependenciesAndDisable(extensions: IExtension[], dependencies: IExtension[], enablementState: EnablementState): TPromise<void> {
|
||||
const message = nls.localize('disableDependeciesConfirmation', "Would you like to disable the dependencies of the extensions also?");
|
||||
const buttons = [
|
||||
nls.localize('yes', "Yes"),
|
||||
|
@ -765,7 +770,7 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService,
|
|||
return this.dialogService.show(Severity.Info, message, buttons, { cancelId: 2 })
|
||||
.then<void>(value => {
|
||||
if (value === 0) {
|
||||
return this.checkAndSetEnablementWithDependenciesAndPacked(extensions, enablementState);
|
||||
return this.checkAndSetEnablement(extensions, dependencies, enablementState);
|
||||
}
|
||||
if (value === 1) {
|
||||
return this.checkAndSetEnablement(extensions, [], enablementState);
|
||||
|
@ -774,11 +779,6 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService,
|
|||
});
|
||||
}
|
||||
|
||||
private checkAndSetEnablementWithDependenciesAndPacked(extensions: IExtension[], enablementState: EnablementState): TPromise<any> {
|
||||
const otherExtensions = this.getExtensionsRecursively(extensions, this.local, enablementState, { dependencies: true, pack: true });
|
||||
return this.checkAndSetEnablement(extensions, otherExtensions, enablementState);
|
||||
}
|
||||
|
||||
private checkAndSetEnablement(extensions: IExtension[], otherExtensions: IExtension[], enablementState: EnablementState): TPromise<any> {
|
||||
const allExtensions = [...extensions, ...otherExtensions];
|
||||
const enable = enablementState === EnablementState.Enabled || enablementState === EnablementState.WorkspaceEnabled;
|
||||
|
|
Loading…
Reference in a new issue