Skip to content

Commit 4f3c25a

Browse files
authored
Merge pull request #186 from ethereum/translate-version
Add helper to translate old style versions to semver
2 parents 316d88a + c28abca commit 4f3c25a

File tree

6 files changed

+68
-0
lines changed

6 files changed

+68
-0
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ The `compile()` method always returns an object, which can contain `errors`, `so
8989

9090
Starting from version 0.4.11 there is a new entry point named `compileStandardWrapper()` which supports Solidity's [standard JSON input and output](https://solidity.readthedocs.io/en/develop/using-the-compiler.html#compiler-input-and-output-json-description). It also maps old compiler output to it.
9191

92+
#### From version 0.4.20
93+
94+
Starting from version 0.4.20 a Semver compatible version number can be retrieved on every compiler release, including old ones, using the `semver()` method.
95+
9296
### Using with Electron
9397

9498
**Note:**

test/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
require('./translate.js');
12
require('./package.js');
23
require('./abi.js');
34
require('./cli.js');

test/package.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ tape('Version and license', function (t) {
66
st.equal(typeof solc.version(), 'string');
77
st.end();
88
});
9+
t.test('check semver', function (st) {
10+
st.equal(typeof solc.semver(), 'string');
11+
st.end();
12+
});
913
t.test('check license', function (st) {
1014
st.ok(typeof solc.license() === 'undefined' || typeof solc.license() === 'string');
1115
st.end();

test/translate.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const tape = require('tape');
2+
const translate = require('../translate.js');
3+
const versionToSemver = translate.versionToSemver;
4+
5+
tape('Version string to Semver translator', function (t) {
6+
t.test('Only numbers', function (st) {
7+
st.equal(versionToSemver('0.1.0'), '0.1.0');
8+
st.end();
9+
});
10+
t.test('New style release (semver)', function (st) {
11+
st.equal(versionToSemver('0.4.5+commit.b318366e.Emscripten.clang'), '0.4.5+commit.b318366e.Emscripten.clang');
12+
st.end();
13+
});
14+
t.test('New style nightly (semver)', function (st) {
15+
st.equal(versionToSemver('0.4.20-nightly.2018.2.13+commit.27ef9794.Emscripten.clang'), '0.4.20-nightly.2018.2.13+commit.27ef9794.Emscripten.clang');
16+
st.end();
17+
});
18+
t.test('Old style 0.1.1', function (st) {
19+
st.equal(versionToSemver('0.1.1-6ff4cd6b/RelWithDebInfo-Emscripten/clang/int'), '0.1.1+commit.6ff4cd6b');
20+
st.end();
21+
});
22+
t.test('Old style 0.2.0', function (st) {
23+
st.equal(
24+
versionToSemver('0.2.0-e7098958/.-Emscripten/clang/int linked to libethereum-1.1.1-bbb80ab0/.-Emscripten/clang/int'),
25+
'0.2.0+commit.e7098958'
26+
);
27+
st.end();
28+
});
29+
t.test('Old style 0.3.5', function (st) {
30+
st.equal(versionToSemver('0.3.5-371690f0/Release-Emscripten/clang/Interpreter'), '0.3.5+commit.371690f0');
31+
st.end();
32+
});
33+
t.test('Old style 0.3.6', function (st) {
34+
st.equal(versionToSemver('0.3.6-3fc68da5/Release-Emscripten/clang'), '0.3.6+commit.3fc68da5');
35+
st.end();
36+
});
37+
});

translate.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
/// Translate old style version numbers to semver.
2+
/// Old style: 0.3.6-3fc68da5/Release-Emscripten/clang
3+
/// 0.3.5-371690f0/Release-Emscripten/clang/Interpreter
4+
/// 0.2.0-e7098958/.-Emscripten/clang/int linked to libethereum-1.1.1-bbb80ab0/.-Emscripten/clang/int
5+
/// 0.1.1-6ff4cd6b/RelWithDebInfo-Emscripten/clang/int
6+
/// New style: 0.4.5+commit.b318366e.Emscripten.clang
7+
function versionToSemver (version) {
8+
// FIXME: parse more detail, but this is a good start
9+
var parsed = version.match(/^([0-9]+\.[0-9]+\.[0-9]+)-([0-9a-f]{8})\/.*$/);
10+
if (parsed) {
11+
return parsed[1] + '+commit.' + parsed[2];
12+
}
13+
// assume it is already semver compatible
14+
return version;
15+
}
16+
117
function translateErrors (ret, errors) {
218
for (var error in errors) {
319
var type = 'error';
@@ -118,5 +134,6 @@ function translateJsonCompilerOutput (output) {
118134
}
119135

120136
module.exports = {
137+
versionToSemver: versionToSemver,
121138
translateJsonCompilerOutput: translateJsonCompilerOutput
122139
};

wrapper.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,10 @@ function setupMethods (soljson) {
157157

158158
var version = soljson.cwrap('version', 'string', []);
159159

160+
var versionToSemver = function () {
161+
return translate.versionToSemver(version());
162+
};
163+
160164
var license = function () {
161165
// return undefined
162166
};
@@ -167,6 +171,7 @@ function setupMethods (soljson) {
167171

168172
return {
169173
version: version,
174+
semver: versionToSemver,
170175
license: license,
171176
compile: compile,
172177
compileStandard: compileStandard,

0 commit comments

Comments
 (0)