提交 085e57de 编写于 作者: J Joao Moreno

Merge branch 'fix-33106' of https://github.com/fabiospampinato/vscode into...

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