proportions: sort firmware based on version
This commit is contained in:
parent
5a278f5b86
commit
aeae866998
2 changed files with 63 additions and 3 deletions
60
lib/vercomp.js
Normal file
60
lib/vercomp.js
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
define([], function () {
|
||||
function order(c) {
|
||||
if (/^\d$/.test(c))
|
||||
return 0
|
||||
else if (/^[a-z]$/i.test(c))
|
||||
return c.charCodeAt(0)
|
||||
else if (c === "~")
|
||||
return -1
|
||||
else if (c)
|
||||
return c.charCodeAt(0) + 256
|
||||
else
|
||||
return 0
|
||||
}
|
||||
|
||||
// Based on dpkg code
|
||||
function vercomp(a, b) {
|
||||
var apos = 0, bpos = 0
|
||||
while (apos < a.length || bpos < b.length) {
|
||||
var firstDiff = 0
|
||||
|
||||
while ((apos < a.length && !/^\d$/.test(a[apos])) || (bpos < b.length && !/^\d$/.test(b[bpos]))) {
|
||||
var ac = order(a[apos])
|
||||
var bc = order(b[bpos])
|
||||
|
||||
if (ac !== bc)
|
||||
return ac - bc
|
||||
|
||||
apos++
|
||||
bpos++
|
||||
}
|
||||
|
||||
while (a[apos] === "0")
|
||||
apos++
|
||||
|
||||
while (b[bpos] === "0")
|
||||
bpos++
|
||||
|
||||
while (/^\d$/.test(a[apos]) && /^\d$/.test(b[bpos])) {
|
||||
if (firstDiff === 0)
|
||||
firstDiff = a.charCodeAt(apos) - b.charCodeAt(bpos)
|
||||
|
||||
apos++
|
||||
bpos++
|
||||
}
|
||||
|
||||
if (/^\d$/.test(a[apos]))
|
||||
return 1
|
||||
|
||||
if (/^\d$/.test(b[bpos]))
|
||||
return -1
|
||||
|
||||
if (firstDiff !== 0)
|
||||
return firstDiff
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
return vercomp
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue