diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js index 489d9cc..51db755 100644 --- a/build/gulpfile.vscode.linux.js +++ b/build/gulpfile.vscode.linux.js @@ -83,7 +83,7 @@ function prepareDebPackage(arch) { const dependencies = debianDependenciesGenerator.getDependencies(binaryDir, product.applicationName, debArch, sysroot); gulp.src('resources/linux/debian/control.template', { base: '.' }) .pipe(replace('@@NAME@@', product.applicationName)) - .pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision)) + .pipe(replace('@@VERSION@@', packageJson.version.replace('+', '.'))) .pipe(replace('@@ARCHITECTURE@@', debArch)) .pipe(replace('@@DEPENDS@@', dependencies.join(', '))) .pipe(replace('@@RECOMMENDS@@', debianRecommendedDependencies.join(', '))) @@ -188,8 +188,7 @@ function prepareRpmPackage(arch) { .pipe(replace('@@NAME@@', product.applicationName)) .pipe(replace('@@NAME_LONG@@', product.nameLong)) .pipe(replace('@@ICON@@', product.linuxIconName)) - .pipe(replace('@@VERSION@@', packageJson.version)) - .pipe(replace('@@RELEASE@@', linuxPackageRevision)) + .pipe(replace('@@VERSION@@', packageJson.version.replace('+', '.'))) .pipe(replace('@@ARCHITECTURE@@', rpmArch)) .pipe(replace('@@LICENSE@@', product.licenseName)) .pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@')) @@ -262,7 +261,7 @@ function prepareSnapPackage(arch) { const snapcraft = gulp.src('resources/linux/snap/snapcraft.yaml', { base: '.' }) .pipe(replace('@@NAME@@', product.applicationName)) - .pipe(replace('@@VERSION@@', commit.substr(0, 8))) + .pipe(replace('@@VERSION@@', packageJson.version.replace('+', '.'))) // Possible run-on values https://snapcraft.io/docs/architectures .pipe(replace('@@ARCHITECTURE@@', arch === 'x64' ? 'amd64' : arch)) .pipe(rename('snap/snapcraft.yaml')); diff --git a/build/gulpfile.vscode.web.js b/build/gulpfile.vscode.web.js index 4c1259c..0d41560 100644 --- a/build/gulpfile.vscode.web.js +++ b/build/gulpfile.vscode.web.js @@ -28,7 +28,7 @@ const WEB_FOLDER = path.join(REPO_ROOT, 'remote', 'web'); const commit = util.getVersion(REPO_ROOT); const quality = product.quality; -const version = (quality && quality !== 'stable') ? `${packageJson.version}-${quality}` : packageJson.version; +const version = (quality && quality !== 'stable') ? `${packageJson.version.replace('+', '.')}-${quality}` : packageJson.version.replace('+', '.'); const vscodeWebResourceIncludes = [ // Workbench diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js index 81ba509..a445749 100644 --- a/build/gulpfile.vscode.win32.js +++ b/build/gulpfile.vscode.win32.js @@ -91,8 +91,8 @@ function buildWin32Setup(arch, target) { NameLong: product.nameLong, NameShort: product.nameShort, DirName: product.win32DirName, - Version: pkg.version, - RawVersion: pkg.version.replace(/-\w+$/, ''), + Version: pkg.version.replace('+', '.'), + RawVersion: pkg.version.replace(/-\w+$/, '').replace('+', '.'), NameVersion: product.win32NameVersion + (target === 'user' ? ' (User)' : ''), ExeBasename: product.nameShort, RegValueName: product.win32RegValueName, diff --git a/resources/linux/rpm/code.spec.template b/resources/linux/rpm/code.spec.template index 00ddb6f..814c964 100644 --- a/resources/linux/rpm/code.spec.template +++ b/resources/linux/rpm/code.spec.template @@ -1,6 +1,6 @@ Name: @@NAME@@ Version: @@VERSION@@ -Release: @@RELEASE@@.el7 +Release: el7 Summary: Code editing. Redefined. Group: Development/Tools Vendor: Microsoft Corporation diff --git a/src/vs/platform/extensionManagement/common/extensionGalleryService.ts b/src/vs/platform/extensionManagement/common/extensionGalleryService.ts index 3515dea..c0aa528 100644 --- a/src/vs/platform/extensionManagement/common/extensionGalleryService.ts +++ b/src/vs/platform/extensionManagement/common/extensionGalleryService.ts @@ -23,7 +23,7 @@ import { IFileService } from 'vs/platform/files/common/files'; import { ILogService } from 'vs/platform/log/common/log'; import { IProductService } from 'vs/platform/product/common/productService'; import { asJson, asTextOrError, IRequestService, isSuccess } from 'vs/platform/request/common/request'; -import { resolveMarketplaceHeaders } from 'vs/platform/externalServices/common/marketplace'; +import { getCoreVersion, resolveMarketplaceHeaders } from 'vs/platform/externalServices/common/marketplace'; import { IStorageService } from 'vs/platform/storage/common/storage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; @@ -988,7 +988,8 @@ abstract class AbstractExtensionGalleryService implements IExtensionGalleryServi return undefined; } - const url = isWeb ? this.api(`/itemName/${publisher}.${name}/version/${version}/statType/${type === StatisticType.Install ? '1' : '3'}/vscodewebextension`) : this.api(`/publishers/${publisher}/extensions/${name}/${version}/stats?statType=${type}`); + const coreVersion = getCoreVersion(version); + const url = isWeb ? this.api(`/itemName/${publisher}.${name}/version/${coreVersion}/statType/${type === StatisticType.Install ? '1' : '3'}/vscodewebextension`) : this.api(`/publishers/${publisher}/extensions/${name}/${coreVersion}/stats?statType=${type}`); const Accept = isWeb ? 'api-version=6.1-preview.1' : '*/*;api-version=4.0-preview.1'; const commonHeaders = await this.commonHeadersPromise; diff --git a/src/vs/platform/extensions/common/extensionValidator.ts b/src/vs/platform/extensions/common/extensionValidator.ts index 0a5e7d2..e453393 100644 --- a/src/vs/platform/extensions/common/extensionValidator.ts +++ b/src/vs/platform/extensions/common/extensionValidator.ts @@ -9,6 +9,7 @@ import { URI } from 'vs/base/common/uri'; import * as nls from 'vs/nls'; import * as semver from 'vs/base/common/semver/semver'; import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; +import { getCoreVersion } from 'vs/platform/externalServices/common/marketplace'; export interface IParsedVersion { hasCaret: boolean; @@ -371,7 +372,8 @@ function isVersionValid(currentVersion: string, date: ProductDate, requestedVers } } - if (!isValidVersion(currentVersion, date, desiredVersion)) { + const coreVersion = getCoreVersion(currentVersion); + if (!isValidVersion(coreVersion, date, desiredVersion)) { notices.push(nls.localize('versionMismatch', "Extension is not compatible with Code {0}. Extension requires: {1}.", currentVersion, requestedVersion)); return false; } diff --git a/src/vs/platform/externalServices/common/marketplace.ts b/src/vs/platform/externalServices/common/marketplace.ts index 5923e1c..a1c9db8 100644 --- a/src/vs/platform/externalServices/common/marketplace.ts +++ b/src/vs/platform/externalServices/common/marketplace.ts @@ -13,6 +13,10 @@ import { IStorageService } from 'vs/platform/storage/common/storage'; import { ITelemetryService, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; import { getTelemetryLevel, supportsTelemetry } from 'vs/platform/telemetry/common/telemetryUtils'; +export function getCoreVersion(version: string): string { + return version.replace(/\.[0-9]+$/, ''); +} + export async function resolveMarketplaceHeaders(version: string, productService: IProductService, environmentService: IEnvironmentService, @@ -20,9 +24,10 @@ export async function resolveMarketplaceHeaders(version: string, fileService: IFileService, storageService: IStorageService | undefined, telemetryService: ITelemetryService): Promise { + const coreVersion = getCoreVersion(version); const headers: IHeaders = { - 'X-Market-Client-Id': `VSCode ${version}`, - 'User-Agent': `VSCode ${version} (${productService.nameShort})` + 'X-Market-Client-Id': `VSCode ${coreVersion}`, + 'User-Agent': `VSCode ${coreVersion} (${productService.nameShort})` }; const uuid = await getServiceMachineId(environmentService, fileService, storageService); const { sessionId } = await telemetryService.getTelemetryInfo(); diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts index 7e63a16..767f4f6 100644 --- a/src/vs/platform/product/common/product.ts +++ b/src/vs/platform/product/common/product.ts @@ -45,7 +45,7 @@ else if (typeof require?.__$__nodeRequire === 'function') { } Object.assign(product, { - version: pkg.version + version: pkg.version.replace('+', '.') }); }