提交 de38bb2e 编写于 作者: S Sandeep Somavarapu

Customise workspace extensions from config

上级 3663d1f0
......@@ -122,6 +122,7 @@ export interface IExtensionManifest {
main?: string;
icon?: string;
categories?: string[];
keywords?: string[];
activationEvents?: string[];
extensionDependencies?: string[];
extensionPack?: string[];
......
......@@ -6,6 +6,7 @@
'use strict';
import { ILocalExtension, IGalleryExtension, EXTENSION_IDENTIFIER_REGEX, IExtensionIdentifier, IReportedExtension, IExtensionManifest } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
export function areSameExtensions(a: IExtensionIdentifier, b: IExtensionIdentifier): boolean {
if (a.uuid && b.uuid) {
......@@ -119,9 +120,22 @@ export function getMaliciousExtensionsSet(report: IReportedExtension[]): Set<str
return result;
}
export function isWorkspaceExtension(manifest: IExtensionManifest): boolean {
export function isWorkspaceExtension(manifest: IExtensionManifest, configurationService: IConfigurationService): boolean {
const extensionId = getGalleryExtensionId(manifest.publisher, manifest.name);
const workspaceExtensions = configurationService.getValue<string[]>('_workbench.workspaceExtensions') || [];
if (workspaceExtensions.length) {
if (workspaceExtensions.indexOf(extensionId) !== -1) {
return true;
}
if (workspaceExtensions.indexOf(`-${extensionId}`) !== -1) {
return false;
}
}
if (manifest.main) {
const extensionId = getGalleryExtensionId(manifest.publisher, manifest.name);
if ((manifest.keywords || []).indexOf('capability_fs') !== -1) {
return true;
}
return [
'vscode.extension-editing',
'vscode.configuration-editing',
......
......@@ -18,6 +18,7 @@ import { IWindowService } from 'vs/platform/windows/common/windows';
import { Action } from 'vs/base/common/actions';
import { ILogService } from 'vs/platform/log/common/log';
import { Disposable } from 'vs/base/common/lifecycle';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
export class MulitExtensionManagementService extends Disposable implements IExtensionManagementService {
......@@ -37,7 +38,8 @@ export class MulitExtensionManagementService extends Disposable implements IExte
@INotificationService private notificationService: INotificationService,
@IWindowService private windowService: IWindowService,
@ILogService private logService: ILogService,
@IExtensionGalleryService private extensionGalleryService: IExtensionGalleryService
@IExtensionGalleryService private extensionGalleryService: IExtensionGalleryService,
@IConfigurationService private configurationService: IConfigurationService
) {
super();
this.servers = this.extensionManagementServerService.extensionManagementServers;
......@@ -84,7 +86,7 @@ export class MulitExtensionManagementService extends Disposable implements IExte
.then(extensionIdentifer => this.localServer.extensionManagementService.getInstalled(LocalExtensionType.User)
.then(installed => {
const extension = installed.filter(i => areSameExtensions(i.identifier, extensionIdentifer))[0];
if (extension && isWorkspaceExtension(extension.manifest)) {
if (this.otherServers.length && extension && isWorkspaceExtension(extension.manifest, this.configurationService)) {
return TPromise.join(this.otherServers.map(server => server.extensionManagementService.install(vsix)))
.then(() => extensionIdentifer);
}
......@@ -98,7 +100,7 @@ export class MulitExtensionManagementService extends Disposable implements IExte
}
return this.extensionGalleryService.getManifest(gallery)
.then(manifest => {
const servers = isWorkspaceExtension(manifest) ? this.servers : [this.localServer];
const servers = isWorkspaceExtension(manifest, this.configurationService) ? this.servers : [this.localServer];
return TPromise.join(servers.map(server => server.extensionManagementService.installFromGallery(gallery)))
.then(() => null);
});
......@@ -115,7 +117,7 @@ export class MulitExtensionManagementService extends Disposable implements IExte
private async syncExtensions(): Promise<void> {
this.localServer.extensionManagementService.getInstalled(LocalExtensionType.User)
.then(async localExtensions => {
const workspaceExtensions = localExtensions.filter(e => isWorkspaceExtension(e.manifest));
const workspaceExtensions = localExtensions.filter(e => isWorkspaceExtension(e.manifest, this.configurationService));
const extensionsToSync: Map<IExtensionManagementServer, ILocalExtension[]> = await this.getExtensionsToSync(workspaceExtensions);
if (extensionsToSync.size > 0) {
const handler = this.notificationService.notify({ severity: Severity.Info, message: localize('synchronising', "Synchronising workspace extensions...") });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册