提交 907a43dd 编写于 作者: F Fabio Spampinato

Support for uninstalling extensions given paths to their .vsix files

上级 9a06ffca
......@@ -18,7 +18,7 @@ import { InstantiationService } from 'vs/platform/instantiation/common/instantia
import { IEnvironmentService, ParsedArgs } from 'vs/platform/environment/common/environment';
import { EnvironmentService } from 'vs/platform/environment/node/environmentService';
import { IExtensionManagementService, IExtensionGalleryService, IExtensionManifest, IGalleryExtension, LocalExtensionType } from 'vs/platform/extensionManagement/common/extensionManagement';
import { ExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService';
import { ExtensionManagementService, validateLocalExtension } from 'vs/platform/extensionManagement/node/extensionManagementService';
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { combinedAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
......@@ -131,19 +131,30 @@ class Main {
return sequence([...vsixTasks, ...galleryTasks]);
}
private uninstallExtension(ids: string[]): TPromise<any> {
return sequence(ids.map(id => () => {
return this.extensionManagementService.getInstalled(LocalExtensionType.User).then(installed => {
const [extension] = installed.filter(e => getId(e.manifest) === id);
private uninstallExtension(extensions: string[]): TPromise<any> {
function extension2id(extension): TPromise<string> {
if ( !/\.vsix$/i.test ( extension ) ) {
return TPromise.as ( extension );
} else {
const zipPath = path.isAbsolute(extension) ? extension : path.join(process.cwd(), extension);
return validateLocalExtension(zipPath).then(getId);
}
}
if (!extension) {
return TPromise.wrapError(new Error(`${notInstalled(id)}\n${useId}`));
}
return sequence(extensions.map(extension => () => {
return extension2id(extension).then(id => {
return this.extensionManagementService.getInstalled(LocalExtensionType.User).then(installed => {
const [extension] = installed.filter(e => getId(e.manifest) === id);
if (!extension) {
return TPromise.wrapError(new Error(`${notInstalled(id)}\n${useId}`));
}
console.log(localize('uninstalling', "Uninstalling {0}...", id));
console.log(localize('uninstalling', "Uninstalling {0}...", id));
return this.extensionManagementService.uninstall(extension, true)
.then(() => console.log(localize('successUninstall', "Extension '{0}' was successfully uninstalled!", id)));
return this.extensionManagementService.uninstall(extension, true)
.then(() => console.log(localize('successUninstall', "Extension '{0}' was successfully uninstalled!", id)));
});
});
}));
}
......
......@@ -134,7 +134,7 @@ export const optionsHelp: { [name: string]: string; } = {
'--list-extensions': localize('listExtensions', "List the installed extensions."),
'--show-versions': localize('showVersions', "Show versions of installed extensions, when using --list-extension."),
'--install-extension (<extension-id> | <extension-vsix-path>)': localize('installExtension', "Installs an extension."),
'--uninstall-extension <extension-id>': localize('uninstallExtension', "Uninstalls an extension."),
'--uninstall-extension (<extension-id> | <extension-vsix-path>)': localize('uninstallExtension', "Uninstalls an extension."),
'--enable-proposed-api <extension-id>': localize('experimentalApis', "Enables proposed api features for an extension."),
'--disable-extensions': localize('disableExtensions', "Disable all installed extensions."),
'--disable-gpu': localize('disableGPU', "Disable GPU hardware acceleration."),
......
......@@ -45,7 +45,7 @@ function parseManifest(raw: string): TPromise<{ manifest: IExtensionManifest; me
});
}
function validate(zipPath: string): TPromise<IExtensionManifest> {
export function validateLocalExtension(zipPath: string): TPromise<IExtensionManifest> {
return buffer(zipPath, 'extension/package.json')
.then(buffer => parseManifest(buffer.toString('utf8')))
.then(({ manifest }) => TPromise.as(manifest));
......@@ -102,7 +102,7 @@ export class ExtensionManagementService implements IExtensionManagementService {
install(zipPath: string): TPromise<void> {
zipPath = path.resolve(zipPath);
return validate(zipPath).then<void>(manifest => {
return validateLocalExtension(zipPath).then<void>(manifest => {
const id = getLocalExtensionIdFromManifest(manifest);
return this.isObsolete(id).then(isObsolete => {
......@@ -262,7 +262,7 @@ export class ExtensionManagementService implements IExtensionManagementService {
};
return this.galleryService.download(extension)
.then(zipPath => validate(zipPath).then(() => zipPath))
.then(zipPath => validateLocalExtension(zipPath).then(() => zipPath))
.then(zipPath => this.installExtension(zipPath, id, metadata));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册