mirror of
https://github.com/HeyPuter/puter.git
synced 2025-02-02 14:18:43 +08:00
dev: always select highest version of the specified language
This commit is contained in:
parent
dcd47bc4cf
commit
77d6bb2d8c
@ -2,6 +2,7 @@ const putility = require("@heyputer/putility");
|
||||
const BaseService = require("../../services/BaseService");
|
||||
const { Judge0Client } = require("./Judge0Client");
|
||||
const { Context } = require("../../util/context");
|
||||
const { find_highest_version } = require("../../util/versionutil");
|
||||
|
||||
class Judge0Service extends BaseService {
|
||||
_construct () {
|
||||
@ -46,7 +47,9 @@ class Judge0Service extends BaseService {
|
||||
return lang.judge0_id;
|
||||
}
|
||||
}
|
||||
let lang = this.languages.find((lang) => lang.language === runtime);
|
||||
const matchingLangs = this.languages.filter((lang) => lang.language === runtime);
|
||||
const lang = find_highest_version(matchingLangs);
|
||||
|
||||
if ( lang ) {
|
||||
return lang.judge0_id;
|
||||
}
|
||||
|
33
src/backend/src/util/versionutil.js
Normal file
33
src/backend/src/util/versionutil.js
Normal file
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Select the object with the highest version.
|
||||
* Objects are of the form:
|
||||
* { version: '1.2.0' }
|
||||
*
|
||||
* Semver is assumed.
|
||||
*
|
||||
* @param {*} objects
|
||||
*/
|
||||
const find_highest_version = (objects) => {
|
||||
let highest = [0,0,0];
|
||||
let highest_obj = null;
|
||||
|
||||
for ( const obj of objects ) {
|
||||
const parts = obj.version.split('.');
|
||||
for ( let i = 0; i < 3; i++ ) {
|
||||
const part = parseInt(parts[i]);
|
||||
if ( part > highest[i] ) {
|
||||
highest = parts;
|
||||
highest_obj = obj;
|
||||
break;
|
||||
} else if ( part < highest[i] ) {
|
||||
break;
|
||||
}1
|
||||
}
|
||||
}
|
||||
|
||||
return highest_obj;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
find_highest_version,
|
||||
};
|
18
src/backend/src/util/versionutil.test.js
Normal file
18
src/backend/src/util/versionutil.test.js
Normal file
@ -0,0 +1,18 @@
|
||||
const { expect } = require('chai');
|
||||
|
||||
describe('versionutil', () => {
|
||||
it('works', () => {
|
||||
const objects = [
|
||||
{ version: '1.2.0' },
|
||||
{ version: '3.0.2' },
|
||||
{ version: '1.2.1' },
|
||||
{ version: '1.2.0' },
|
||||
{ version: '3.1.0', h: true },
|
||||
{ version: '1.2.2' },
|
||||
];
|
||||
|
||||
const { find_highest_version } = require('./versionutil');
|
||||
const highest_object = find_highest_version(objects);
|
||||
expect(highest_object).to.deep.equal({ version: '3.1.0', h: true });
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue
Block a user