提交 e6e504a0 编写于 作者: A Alex Dima

Fixes #4106: Make 0.x.y extensions compatible with 1.z.t vscode versions

上级 1d352907
......@@ -119,38 +119,60 @@ export function isValidVersion(_version: string | INormalizedVersion, _desiredVe
return false;
}
if (version.majorBase < desiredVersion.majorBase) {
let majorBase = version.majorBase;
let minorBase = version.minorBase;
let patchBase = version.patchBase;
let desiredMajorBase = desiredVersion.majorBase;
let desiredMinorBase = desiredVersion.minorBase;
let desiredPatchBase = desiredVersion.patchBase;
let majorMustEqual = desiredVersion.majorMustEqual;
let minorMustEqual = desiredVersion.minorMustEqual;
let patchMustEqual = desiredVersion.patchMustEqual;
// Anything < 1.0.0 is compatible with >= 1.0.0, except exact matches
if (majorBase === 1 && desiredMajorBase === 0 && (!majorMustEqual || !minorMustEqual || !patchMustEqual)) {
desiredMajorBase = 1;
desiredMinorBase = 0;
desiredPatchBase = 0;
majorMustEqual = true;
minorMustEqual = false;
patchMustEqual = false;
}
if (majorBase < desiredMajorBase) {
// smaller major version
return false;
}
if (version.majorBase > desiredVersion.majorBase) {
if (majorBase > desiredMajorBase) {
// higher major version
return (!desiredVersion.majorMustEqual);
return (!majorMustEqual);
}
// at this point, majorBase are equal
if (version.minorBase < desiredVersion.minorBase) {
if (minorBase < desiredMinorBase) {
// smaller minor version
return false;
}
if (version.minorBase > desiredVersion.minorBase) {
if (minorBase > desiredMinorBase) {
// higher minor version
return (!desiredVersion.minorMustEqual);
return (!minorMustEqual);
}
// at this point, minorBase are equal
if (version.patchBase < desiredVersion.patchBase) {
if (patchBase < desiredPatchBase) {
// smaller patch version
return false;
}
if (version.patchBase > desiredVersion.patchBase) {
if (patchBase > desiredPatchBase) {
// higher patch version
return (!desiredVersion.patchMustEqual);
return (!patchMustEqual);
}
// at this point, patchBase are equal
......
......@@ -139,14 +139,60 @@ suite('Extension Version Validator', () => {
testIsValidVersion('0.11.0', '^0.10.0', false);
testIsValidVersion('0.11.0', '*', true);
// Anything < 1.0.0 is compatible
testIsValidVersion('1.0.0', 'x.x.x', true);
testIsValidVersion('1.0.0', '0.x.x', false);
testIsValidVersion('1.0.0', '0.x.x', true);
testIsValidVersion('1.0.0', '0.10.0', false);
testIsValidVersion('1.0.0', '0.10.2', false);
testIsValidVersion('1.0.0', '^0.10.2', false);
testIsValidVersion('1.0.0', '0.10.x', false);
testIsValidVersion('1.0.0', '^0.10.0', false);
testIsValidVersion('1.0.0', '^0.10.2', true);
testIsValidVersion('1.0.0', '0.10.x', true);
testIsValidVersion('1.0.0', '^0.10.0', true);
testIsValidVersion('1.0.0', '1.0.0', true);
testIsValidVersion('1.0.0', '^1.0.0', true);
testIsValidVersion('1.0.0', '^2.0.0', false);
testIsValidVersion('1.0.0', '*', true);
testIsValidVersion('1.0.100', 'x.x.x', true);
testIsValidVersion('1.0.100', '0.x.x', true);
testIsValidVersion('1.0.100', '0.10.0', false);
testIsValidVersion('1.0.100', '0.10.2', false);
testIsValidVersion('1.0.100', '^0.10.2', true);
testIsValidVersion('1.0.100', '0.10.x', true);
testIsValidVersion('1.0.100', '^0.10.0', true);
testIsValidVersion('1.0.100', '1.0.0', false);
testIsValidVersion('1.0.100', '^1.0.0', true);
testIsValidVersion('1.0.100', '^1.0.1', true);
testIsValidVersion('1.0.100', '^2.0.0', false);
testIsValidVersion('1.0.100', '*', true);
testIsValidVersion('1.100.0', 'x.x.x', true);
testIsValidVersion('1.100.0', '0.x.x', true);
testIsValidVersion('1.100.0', '0.10.0', false);
testIsValidVersion('1.100.0', '0.10.2', false);
testIsValidVersion('1.100.0', '^0.10.2', true);
testIsValidVersion('1.100.0', '0.10.x', true);
testIsValidVersion('1.100.0', '^0.10.0', true);
testIsValidVersion('1.100.0', '1.0.0', false);
testIsValidVersion('1.100.0', '^1.0.0', true);
testIsValidVersion('1.100.0', '^1.1.0', true);
testIsValidVersion('1.100.0', '^1.100.0', true);
testIsValidVersion('1.100.0', '^2.0.0', false);
testIsValidVersion('1.100.0', '*', true);
testIsValidVersion('2.0.0', 'x.x.x', true);
testIsValidVersion('2.0.0', '0.x.x', false);
testIsValidVersion('2.0.0', '0.10.0', false);
testIsValidVersion('2.0.0', '0.10.2', false);
testIsValidVersion('2.0.0', '^0.10.2', false);
testIsValidVersion('2.0.0', '0.10.x', false);
testIsValidVersion('2.0.0', '^0.10.0', false);
testIsValidVersion('2.0.0', '1.0.0', false);
testIsValidVersion('2.0.0', '^1.0.0', false);
testIsValidVersion('2.0.0', '^1.1.0', false);
testIsValidVersion('2.0.0', '^1.100.0', false);
testIsValidVersion('2.0.0', '^2.0.0', true);
testIsValidVersion('2.0.0', '*', true);
});
test('isValidExtensionVersion', () => {
......@@ -270,9 +316,9 @@ suite('Extension Version Validator', () => {
testIsValidVersion('1.0.0', '0.x.x', false); // fails due to lack of specificity
testIsValidVersion('1.0.0', '0.10.0', false);
testIsValidVersion('1.0.0', '0.10.2', false);
testIsValidVersion('1.0.0', '^0.10.2', false);
testIsValidVersion('1.0.0', '0.10.x', false);
testIsValidVersion('1.0.0', '^0.10.0', false);
testIsValidVersion('1.0.0', '^0.10.2', true);
testIsValidVersion('1.0.0', '0.10.x', true);
testIsValidVersion('1.0.0', '^0.10.0', true);
testIsValidVersion('1.0.0', '*', false); // fails due to lack of specificity
testIsValidVersion('1.10.0', 'x.x.x', false); // fails due to lack of specificity
......@@ -283,5 +329,61 @@ suite('Extension Version Validator', () => {
testIsValidVersion('1.10.0', '1.10.x', true);
testIsValidVersion('1.10.0', '^1.10.0', true);
testIsValidVersion('1.10.0', '*', false); // fails due to lack of specificity
// Anything < 1.0.0 is compatible
testIsValidVersion('1.0.0', 'x.x.x', false); // fails due to lack of specificity
testIsValidVersion('1.0.0', '0.x.x', false); // fails due to lack of specificity
testIsValidVersion('1.0.0', '0.10.0', false);
testIsValidVersion('1.0.0', '0.10.2', false);
testIsValidVersion('1.0.0', '^0.10.2', true);
testIsValidVersion('1.0.0', '0.10.x', true);
testIsValidVersion('1.0.0', '^0.10.0', true);
testIsValidVersion('1.0.0', '1.0.0', true);
testIsValidVersion('1.0.0', '^1.0.0', true);
testIsValidVersion('1.0.0', '^2.0.0', false);
testIsValidVersion('1.0.0', '*', false); // fails due to lack of specificity
testIsValidVersion('1.0.100', 'x.x.x', false); // fails due to lack of specificity
testIsValidVersion('1.0.100', '0.x.x', false); // fails due to lack of specificity
testIsValidVersion('1.0.100', '0.10.0', false);
testIsValidVersion('1.0.100', '0.10.2', false);
testIsValidVersion('1.0.100', '^0.10.2', true);
testIsValidVersion('1.0.100', '0.10.x', true);
testIsValidVersion('1.0.100', '^0.10.0', true);
testIsValidVersion('1.0.100', '1.0.0', false);
testIsValidVersion('1.0.100', '^1.0.0', true);
testIsValidVersion('1.0.100', '^1.0.1', true);
testIsValidVersion('1.0.100', '^2.0.0', false);
testIsValidVersion('1.0.100', '*', false); // fails due to lack of specificity
testIsValidVersion('1.100.0', 'x.x.x', false); // fails due to lack of specificity
testIsValidVersion('1.100.0', '0.x.x', false); // fails due to lack of specificity
testIsValidVersion('1.100.0', '0.10.0', false);
testIsValidVersion('1.100.0', '0.10.2', false);
testIsValidVersion('1.100.0', '^0.10.2', true);
testIsValidVersion('1.100.0', '0.10.x', true);
testIsValidVersion('1.100.0', '^0.10.0', true);
testIsValidVersion('1.100.0', '1.0.0', false);
testIsValidVersion('1.100.0', '^1.0.0', true);
testIsValidVersion('1.100.0', '^1.1.0', true);
testIsValidVersion('1.100.0', '^1.100.0', true);
testIsValidVersion('1.100.0', '^2.0.0', false);
testIsValidVersion('1.100.0', '*', false); // fails due to lack of specificity
testIsValidVersion('2.0.0', 'x.x.x', false); // fails due to lack of specificity
testIsValidVersion('2.0.0', '0.x.x', false); // fails due to lack of specificity
testIsValidVersion('2.0.0', '0.10.0', false);
testIsValidVersion('2.0.0', '0.10.2', false);
testIsValidVersion('2.0.0', '^0.10.2', false);
testIsValidVersion('2.0.0', '0.10.x', false);
testIsValidVersion('2.0.0', '^0.10.0', false);
testIsValidVersion('2.0.0', '1.0.0', false);
testIsValidVersion('2.0.0', '^1.0.0', false);
testIsValidVersion('2.0.0', '^1.1.0', false);
testIsValidVersion('2.0.0', '^1.100.0', false);
testIsValidVersion('2.0.0', '^2.0.0', true);
testIsValidVersion('2.0.0', '*', false); // fails due to lack of specificity
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册