mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Add support for 4 part version numbers (#8925)
* first crack at fix * after test complete * pr feedback + tests * fix whitespace * PR fedback
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import { SemVer } from 'semver';
|
||||
|
||||
|
||||
|
||||
function fourPart2SemVer(version: string): string {
|
||||
if (version.includes('-')) {
|
||||
//return unchanged if version contains a pre-release suffix
|
||||
return version;
|
||||
} else {
|
||||
let parts: string[] = version.split('.');
|
||||
if (parts.length > 3) {
|
||||
version = `${parts[0]}.${parts[1]}.${parts[2]}+${parts.slice(3).join('.')}`;
|
||||
}
|
||||
return version;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This Proxy for SemVer behaves the same way as the SamVer except the build number of the SemVer specification at: https://semver.org/ is prefixed by a '.' as well instead of a '+'. So while the BNF for valid SemVer is:
|
||||
<valid semver> ::= <version core>
|
||||
| <version core> "-" <pre-release>
|
||||
| <version core> "+" <build>
|
||||
| <version core> "-" <pre-release> "+" <build>
|
||||
<version core> ::= <major> "." <minor> "." <patch>
|
||||
|
||||
SemVerProxy support the following BNF:
|
||||
<valid semver> ::= <version core>
|
||||
| <version core> "-" <pre-release>
|
||||
| <version core> "." <build>
|
||||
| <version core> "-" <pre-release> "+" <build>
|
||||
<version core> ::= <major> "." <minor> "." <patch>
|
||||
*/
|
||||
export class SemVerProxy extends SemVer {
|
||||
private _version: string;
|
||||
|
||||
constructor(version: string | SemVerProxy, loose?: boolean) {
|
||||
let ver: string;
|
||||
|
||||
if (version instanceof SemVer) {
|
||||
ver = version.version;
|
||||
if (!ver) {
|
||||
throw new Error('Invalid version');
|
||||
}
|
||||
} else {
|
||||
ver = fourPart2SemVer(version);
|
||||
}
|
||||
super(ver, loose);
|
||||
if (ver.includes('-')) {
|
||||
this._version = ver;
|
||||
} else {
|
||||
this._version = ver.replace('+', '.'); // change back any '+' character used to delimit the build portion of the version with a '.'
|
||||
}
|
||||
}
|
||||
|
||||
get version(): string {
|
||||
return this._version;
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import { AzdataInstallLocationKey, DeploymentConfigurationKey } from '../../cons
|
||||
import { Command, OsDistribution, ToolType } from '../../interfaces';
|
||||
import { IPlatformService } from '../platformService';
|
||||
import { dependencyType, ToolBase } from './toolBase';
|
||||
import { SemVerProxy } from './SemVerProxy';
|
||||
|
||||
const localize = nls.loadMessageBundle();
|
||||
export const AzdataToolName = 'azdata';
|
||||
@@ -58,7 +59,7 @@ export class AzdataTool extends ToolBase {
|
||||
protected getVersionFromOutput(output: string): SemVer | undefined {
|
||||
let version: SemVer | undefined = undefined;
|
||||
if (output && output.split(EOL).length > 0) {
|
||||
version = new SemVer(output.split(EOL)[0].replace(/ /g, ''));
|
||||
version = new SemVerProxy(output.split(EOL)[0].replace(/ /g, ''));
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user