move version rationalization to it's own class
This commit is contained in:
@ -2,6 +2,8 @@ var utils = require('../utils');
|
||||
var _ = require('lodash');
|
||||
var join = require('path').join;
|
||||
|
||||
var Version = require('../../scripts/Version');
|
||||
|
||||
var defaultOpts = {
|
||||
directory: join(__dirname, '..', '..', '.esvm'),
|
||||
nodes: 1,
|
||||
@ -23,39 +25,28 @@ var defaultOpts = {
|
||||
* @param {[type]} target - the grunt target to configure
|
||||
*/
|
||||
function setConfig(ref, target) {
|
||||
var minorV = String(ref).replace(/^v/, '').replace(/(\d+\.\d+)\..+/, '$1');
|
||||
var v = Version.fromBranch(String(ref).replace(/^v/, '').replace(/(\d+\.\d+)\..+/, '$1'));
|
||||
var config = target.options.config = (target.options.config || {});
|
||||
|
||||
switch (minorV) {
|
||||
case '0.90':
|
||||
case '1.0':
|
||||
case '1.1':
|
||||
// no special treatment
|
||||
break;
|
||||
case '1.2':
|
||||
case '1.3':
|
||||
case '1.4':
|
||||
case '1.5':
|
||||
case '1.6':
|
||||
case '1.x':
|
||||
target.options.config = _.merge({
|
||||
if (v.satisfies('^1.2')) {
|
||||
_.merge(config, {
|
||||
'node.bench': true,
|
||||
'script.disable_dynamic': false
|
||||
}, target.options.config);
|
||||
break;
|
||||
default:
|
||||
target.options.config = _.merge({
|
||||
});
|
||||
}
|
||||
|
||||
if (v.satisfies('>=1.6')) {
|
||||
_.merge(config, {
|
||||
'node.bench': true,
|
||||
'script.inline': true,
|
||||
'script.indexed': true
|
||||
}, target.options.config);
|
||||
break;
|
||||
});
|
||||
}
|
||||
|
||||
_.defaultsDeep(target.options, defaultOpts);
|
||||
|
||||
target.options = _.merge({}, defaultOpts, target.options);
|
||||
|
||||
if (minorV === 'master') {
|
||||
delete target.options.config['discovery.zen.ping_timeout'];
|
||||
if (v.satisfies('>=1.6')) {
|
||||
delete config['discovery.zen.ping_timeout'];
|
||||
}
|
||||
|
||||
if (target.options.branch && !target.options.version) {
|
||||
|
||||
@ -72,7 +72,7 @@
|
||||
"nock": "~0.28.3",
|
||||
"open": "0.0.4",
|
||||
"optimist": "~0.6.0",
|
||||
"semver": "~4.1.0",
|
||||
"semver": "^4.3.6",
|
||||
"sinon": "~1.12.2",
|
||||
"split": "~0.3.2",
|
||||
"through2": "~0.6.3",
|
||||
@ -84,7 +84,7 @@
|
||||
"bluebird": "^2.9.14",
|
||||
"chalk": "^1.0.0",
|
||||
"forever-agent": "^0.6.0",
|
||||
"lodash": "^3.9.3",
|
||||
"lodash": "^3.10.0",
|
||||
"lodash-compat": "^3.0.0"
|
||||
},
|
||||
"repository": {
|
||||
|
||||
56
scripts/Version.js
Normal file
56
scripts/Version.js
Normal file
@ -0,0 +1,56 @@
|
||||
var _ = require('lodash');
|
||||
var package = require('../package.json');
|
||||
var branches = package.config.supported_es_branches;
|
||||
var semver = require('semver');
|
||||
|
||||
var maxMinorVersion = function (majorV) {
|
||||
var versions = branches.map(function (v) { return v + '.0'; });
|
||||
return new Version(semver.maxSatisfying(versions, '^' + majorV));
|
||||
};
|
||||
|
||||
function Version(v) {
|
||||
this.version = v;
|
||||
this.major = semver.major(v);
|
||||
this.minor = semver.minor(v);
|
||||
this.patch = semver.patch(v);
|
||||
}
|
||||
|
||||
Version.fromBranch = function (branch) {
|
||||
var m;
|
||||
|
||||
// master === the highest version number
|
||||
if (branch === 'master') return new Version('2.0.0');
|
||||
|
||||
// n.m -> n.m.0
|
||||
if (m = branch.match(/^\d+\.\d+$/)) return new Version(branch + '.0');
|
||||
|
||||
// n.x -> n.(maxVersion + 1).0
|
||||
if (m = branch.match(/^(\d+)\.x$/i)) return maxMinorVersion(m[1]).increment('minor');
|
||||
|
||||
throw new Error('unable to convert branch "' + branch + '" to semver');
|
||||
};
|
||||
|
||||
Version.prototype.increment = function (which) {
|
||||
return new Version(semver.inc(this.version, which));
|
||||
};
|
||||
|
||||
Version.prototype.satisfies = function (range) {
|
||||
return semver.satisfies(this.version, range);
|
||||
};
|
||||
|
||||
// merge a list of option objects, each of which has a "version" key dictating
|
||||
// the range of versions those options should be included in. Options are merged
|
||||
// in the order of the array
|
||||
Version.prototype.mergeOpts = function (opts, defaults) {
|
||||
var self = this;
|
||||
|
||||
return opts
|
||||
.filter(function (rule) {
|
||||
return self.satisfies(rule.version);
|
||||
})
|
||||
.reduce(function (overrides, rule) {
|
||||
return _.merge(overrides, _.omit(rule, 'version'));
|
||||
}, defaults ? _.clone(defaults) : {});
|
||||
};
|
||||
|
||||
module.exports = Version;
|
||||
@ -9,9 +9,9 @@ module.exports = function (branch, done) {
|
||||
var async = require('async');
|
||||
var chalk = require('chalk');
|
||||
var path = require('path');
|
||||
var semver = require('semver');
|
||||
var fromRoot = path.join.bind(path, require('find-root')(__dirname));
|
||||
var templates = require('./templates');
|
||||
var Version = require('../Version');
|
||||
var urlParamRE = /\{(\w+)\}/g;
|
||||
|
||||
var files; // populated in readSpecFiles
|
||||
@ -19,34 +19,10 @@ module.exports = function (branch, done) {
|
||||
var docVars; // slightly modified clone of apiSpec for the docs
|
||||
|
||||
var branchSuffix = utils.branchSuffix(branch);
|
||||
var maxMinorVersion = (function () {
|
||||
var branches = require(fromRoot('package.json')).config.supported_es_branches;
|
||||
var top = branches.map(function (v) { return v + '.0'; }).sort(semver.compare).pop();
|
||||
return top.split('.')[1];
|
||||
}());
|
||||
|
||||
var branchAsVersion = (function () {
|
||||
var m;
|
||||
|
||||
// master === the highest version number
|
||||
if (branch === 'master') return '2.0.0';
|
||||
// n.m -> n.m.0
|
||||
if (m = branch.match(/^\d+\.\d+$/)) return branch + '.0';
|
||||
// n.x -> n.(maxVersion + 1).0
|
||||
if (m = branch.match(/^(\d+)\.x$/i)) return m[1] + '.' + (+maxMinorVersion + 1) + '.0';
|
||||
|
||||
throw new Error('unable to convert branch "' + branch + '" to semver');
|
||||
}());
|
||||
|
||||
var esDir = fromRoot('src/_elasticsearch_' + _.snakeCase(branch));
|
||||
|
||||
var overrides = require('./overrides')
|
||||
.filter(function (rule) {
|
||||
return semver.satisfies(branchAsVersion, rule.version);
|
||||
})
|
||||
.reduce(function (overrides, rule) {
|
||||
return _.merge(overrides, _.omit(rule, 'version'));
|
||||
}, {
|
||||
var version = Version.fromBranch(branch);
|
||||
var overrides = version.mergeOpts(require('./overrides'), {
|
||||
aliases: {},
|
||||
paramAsBody: {},
|
||||
clientActionModifier: false
|
||||
|
||||
Reference in New Issue
Block a user