提交 1babad1f 编写于 作者: S Sandeep Somavarapu

#19685: Scanning local extensions

- Adopt to gallery extension id (lowercase) while scanning local extensions in Extension management and Extension host
上级 0e9418a6
......@@ -8,7 +8,7 @@
import { ILocalExtension, IGalleryExtension, IExtensionManifest } from 'vs/platform/extensionManagement/common/extensionManagement';
export function getGalleryExtensionId(publisher: string, name: string): string {
return `${publisher}.${name.toLocaleLowerCase()}`;
return adoptToGalleryExtensioId(`${publisher}.${name}`);
}
export function getLocalExtensionIdFromGallery(extension: IGalleryExtension, version: string): string {
......@@ -20,7 +20,20 @@ export function getLocalExtensionIdFromManifest(manifest: IExtensionManifest): s
}
export function getGalleryExtensionIdFromLocal(local: ILocalExtension): string {
return local.id.replace(/-\d+\.\d+\.\d+$/, '');
return adoptToGalleryExtensioId(local.id.replace(/-\d+\.\d+\.\d+$/, ''));
}
export function getIdAndVersionFromLocalExtensionId(localExtensionId: string): { id: string, version: string } {
const matches = /^([^.]+\..+)-(\d+\.\d+\.\d+)$/.exec(localExtensionId);
return matches ? { id: matches[1] ? adoptToGalleryExtensioId(matches[1]) : null, version: matches[2] } : { id: null, version: null };
}
export function adoptToGalleryExtensioId(id: string): string {
return id.toLocaleLowerCase();
}
export function areSameExtensions(a: { id: string }, b: { id: string }): boolean {
return adoptToGalleryExtensioId(a.id) === adoptToGalleryExtensioId(b.id);
}
function getLocalExtensionId(id: string, version: string): string {
......
......@@ -19,7 +19,7 @@ import {
IGalleryExtension, IExtensionManifest, IGalleryMetadata,
InstallExtensionEvent, DidInstallExtensionEvent, DidUninstallExtensionEvent, LocalExtensionType
} from 'vs/platform/extensionManagement/common/extensionManagement';
import { getLocalExtensionIdFromGallery, getLocalExtensionIdFromManifest } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { getLocalExtensionIdFromGallery, getLocalExtensionIdFromManifest, getGalleryExtensionIdFromLocal, getIdAndVersionFromLocalExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { localizeManifest } from '../common/extensionNls';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { Limiter } from 'vs/base/common/async';
......@@ -457,7 +457,7 @@ export class ExtensionManagementService implements IExtensionManagementService {
private scanUserExtensions(): TPromise<ILocalExtension[]> {
return this.scanExtensions(this.extensionsPath, LocalExtensionType.User).then(extensions => {
const byId = values(groupBy(extensions, p => `${p.manifest.publisher}.${p.manifest.name}`));
const byId = values(groupBy(extensions, p => getGalleryExtensionIdFromLocal(p)));
return byId.map(p => p.sort((a, b) => semver.rcompare(a.manifest.version, b.manifest.version))[0]);
});
}
......@@ -518,9 +518,8 @@ export class ExtensionManagementService implements IExtensionManagementService {
return this.scanExtensionFolders(this.extensionsPath)
.then(folders => {
const galleryFolders = folders
.map(folder => ({ folder, match: /^([^.]+\..+)-(\d+\.\d+\.\d+)$/.exec(folder) }))
.filter(({ match }) => !!match)
.map(({ folder, match }) => ({ folder, id: match[1], version: match[2] }));
.map(folder => (assign({ folder }, getIdAndVersionFromLocalExtensionId(folder))))
.filter(({ id, version }) => !!id && !!version);
const byId = values(groupBy(galleryFolders, p => p.id));
......
......@@ -17,6 +17,7 @@ import json = require('vs/base/common/json');
import Types = require('vs/base/common/types');
import { isValidExtensionDescription } from 'vs/platform/extensions/node/extensionValidator';
import * as semver from 'semver';
import { getIdAndVersionFromLocalExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
const MANIFEST_FILE = 'package.json';
......@@ -313,15 +314,13 @@ export class ExtensionScanner {
return;
}
const match = /^([^.]+\..+)-(\d+\.\d+\.\d+)$/.exec(folder);
const {id, version} = getIdAndVersionFromLocalExtensionId(folder);
if (!match) {
if (!id && !version) {
nonGallery.push(folder);
return;
}
const id = match[1];
const version = match[2];
gallery.push({ folder, id, version });
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册