Skip to content

Commit 77d6bb2

Browse files
committed
dev: always select highest version of the specified language
1 parent dcd47bc commit 77d6bb2

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

src/backend/src/modules/puterexec/Judge0Service.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const putility = require("@heyputer/putility");
22
const BaseService = require("../../services/BaseService");
33
const { Judge0Client } = require("./Judge0Client");
44
const { Context } = require("../../util/context");
5+
const { find_highest_version } = require("../../util/versionutil");
56

67
class Judge0Service extends BaseService {
78
_construct () {
@@ -46,7 +47,9 @@ class Judge0Service extends BaseService {
4647
return lang.judge0_id;
4748
}
4849
}
49-
let lang = this.languages.find((lang) => lang.language === runtime);
50+
const matchingLangs = this.languages.filter((lang) => lang.language === runtime);
51+
const lang = find_highest_version(matchingLangs);
52+
5053
if ( lang ) {
5154
return lang.judge0_id;
5255
}

src/backend/src/util/versionutil.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Select the object with the highest version.
3+
* Objects are of the form:
4+
* { version: '1.2.0' }
5+
*
6+
* Semver is assumed.
7+
*
8+
* @param {*} objects
9+
*/
10+
const find_highest_version = (objects) => {
11+
let highest = [0,0,0];
12+
let highest_obj = null;
13+
14+
for ( const obj of objects ) {
15+
const parts = obj.version.split('.');
16+
for ( let i = 0; i < 3; i++ ) {
17+
const part = parseInt(parts[i]);
18+
if ( part > highest[i] ) {
19+
highest = parts;
20+
highest_obj = obj;
21+
break;
22+
} else if ( part < highest[i] ) {
23+
break;
24+
}1
25+
}
26+
}
27+
28+
return highest_obj;
29+
};
30+
31+
module.exports = {
32+
find_highest_version,
33+
};
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const { expect } = require('chai');
2+
3+
describe('versionutil', () => {
4+
it('works', () => {
5+
const objects = [
6+
{ version: '1.2.0' },
7+
{ version: '3.0.2' },
8+
{ version: '1.2.1' },
9+
{ version: '1.2.0' },
10+
{ version: '3.1.0', h: true },
11+
{ version: '1.2.2' },
12+
];
13+
14+
const { find_highest_version } = require('./versionutil');
15+
const highest_object = find_highest_version(objects);
16+
expect(highest_object).to.deep.equal({ version: '3.1.0', h: true });
17+
});
18+
});

0 commit comments

Comments
 (0)