Fixed packagist dotted version parsing and comparison

Fixes #376
This commit is contained in:
Thaddee Tyl 2015-02-28 00:34:42 +01:00
parent 676a5e88a5
commit c9481e622d

View File

@ -3314,7 +3314,7 @@ function omitv(version) {
// Take a version without the starting v.
// eg, '1.0.x-beta'
// Return { numbers: '1.0.x', modifier: 2, modifierCount: 1 }
// Return { numbers: [1,0,something big], modifier: 2, modifierCount: 1 }
function phpNumberedVersionData(version) {
// A version has a numbered part and a modifier part
// (eg, 1.0.0-patch, 2.0.x-dev).
@ -3380,13 +3380,40 @@ function phpNumberedVersionData(version) {
}
}
// Try to convert to a list of numbers.
var toNum = function(s) {
var n = +s;
if (n !== n) { // If n is NaN…
n = 0xffffffff;
}
return n;
};
var numberList = numbered.split('.').map(toNum);
return {
numbers: numbered,
numbers: numberList,
modifier: modifierLevel,
modifierCount: modifierLevelCount,
};
}
function listCompare(a, b) {
for (var i = 0; i < a.length; i++) {
if (a[i] < b[i]) {
return -1;
} else if (a[i] > b[i]) {
return 1;
}
}
if (a.length < b.length) {
return -1;
} else if (a.length > b.length) {
return 1;
} else {
return 0;
}
}
// Return a negative value if v1 < v2,
// zero if v1 = v2,
// a positive value otherwise.
@ -3405,10 +3432,9 @@ function phpVersionCompare(v1, v2) {
}
// Compare the numbered part (eg, 1.0.0 < 2.0.0).
if (v1data.numbers < v2data.numbers) {
return -1;
} else if (v1data.numbers > v2data.numbers) {
return 1;
var numbersCompare = listCompare(v1data.numbers, v2data.numbers);
if (numbersCompare !== 0) {
return numbersCompare;
}
// Compare the modifiers (eg, alpha < beta).