mirror of
https://github.com/apache/cordova-android.git
synced 2026-05-11 00:00:05 +08:00
Consistent order from ProjectBuilder.apkSorter (#779)
This function used to give a different order depending on the behavior of Array.prototype.sort(), which led to a test failure on Node.js 12 (see apache/cordova-android#767). This update gives a consistent sort order, regardless of the JavaScript engine implementation, now succeeds on Node.js versions 6, 8, 10, and 12. Resolves #767 For reference: - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
This commit is contained in:
+15
-14
@@ -301,21 +301,22 @@ class ProjectBuilder {
|
||||
module.exports = ProjectBuilder;
|
||||
|
||||
function apkSorter (fileA, fileB) {
|
||||
// De-prioritize arch specific builds
|
||||
var archSpecificRE = /-x86|-arm/;
|
||||
if (archSpecificRE.exec(fileA)) {
|
||||
return 1;
|
||||
} else if (archSpecificRE.exec(fileB)) {
|
||||
return -1;
|
||||
}
|
||||
const archSpecificRE = /-x86|-arm/;
|
||||
|
||||
// De-prioritize unsigned builds
|
||||
var unsignedRE = /-unsigned/;
|
||||
if (unsignedRE.exec(fileA)) {
|
||||
return 1;
|
||||
} else if (unsignedRE.exec(fileB)) {
|
||||
return -1;
|
||||
}
|
||||
const unsignedRE = /-unsigned/;
|
||||
|
||||
// De-prioritize arch-specific builds & unsigned builds
|
||||
const lower = (fileName) => {
|
||||
return archSpecificRE.exec(fileName)
|
||||
? -2
|
||||
: unsignedRE.exec(fileName)
|
||||
? -1
|
||||
: 0;
|
||||
};
|
||||
|
||||
const lowerDiff = lower(fileB) - lower(fileA);
|
||||
|
||||
if (lowerDiff !== 0) return lowerDiff;
|
||||
|
||||
var timeDiff = fs.statSync(fileB).mtime - fs.statSync(fileA).mtime;
|
||||
return timeDiff === 0 ? fileA.length - fileB.length : timeDiff;
|
||||
|
||||
Reference in New Issue
Block a user