#55055 Disable or uninstall only pack extensions but not dependencies

This commit is contained in:
Sandeep Somavarapu 2018-07-25 18:44:48 +02:00
parent d86306d665
commit 052cd3cecb
2 changed files with 21 additions and 26 deletions

View file

@ -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) {

View file

@ -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;