Files
elasticsearch-js/scripts/generate/index.js

119 lines
2.5 KiB
JavaScript

var async = require('async');
var fs = require('fs');
var spawn = require('../_spawn');
var argv = require('optimist')
.options({
verbose: {
alias: 'v',
default: false,
boolean: true
},
api: {
default: true,
boolean: true
},
tests: {
default: true,
boolean: true
},
update: {
default: true,
boolean: true
}
});
var path = require('path');
var root = require('find-root')(__dirname);
var fromRoot = path.join.bind(path, root);
var utils = require(fromRoot('grunt/utils'));
var esUrl = 'https://github.com/elasticsearch/elasticsearch.git';
var branches;
if (process.env.ES_GIT_BRANCH) {
branches = [process.env.ES_GIT_BRANCH.split('/').slice(1).join('/')];
} else {
branches = utils.branches;
}
if (process.env.npm_config_argv) {
// when called by NPM
argv = argv.parse(JSON.parse(process.env.npm_config_argv).original);
} else {
// when called directly
argv = argv.argv;
}
function isDirectory(dir) {
var stat;
try { stat = fs.statSync(dir); } catch (e) {}
return (stat && stat.isDirectory());
}
function storeDir(branch) {
return fromRoot('src/elasticsearch' + utils.branchSuffix(branch));
}
function spawnStep(cmd, args, cwd) {
return function (done) {
spawn(cmd, args, {
verbose: argv.versbose,
cwd: cwd
}, function (status) {
done(status ? new Error('Non-zero exit code: %d', status) : void 0);
});
};
}
function checkoutStep(branch) {
return function (done) {
var dir = storeDir(branch);
if (isDirectory(dir)) {
return done();
}
spawnStep('git', [
'clone', '--depth', '50', '--branch', branch, '--', esUrl, dir
], root)(done);
};
}
function updateStep(branch) {
return function (done) {
if (!argv.update) {
return done();
}
var dir = storeDir(branch);
async.series([
spawnStep('git', ['fetch', 'origin', branch], dir),
spawnStep('git', ['reset', '--hard', 'origin/' + branch], dir),
spawnStep('git', ['clean', '-fdx'], dir)
], done);
};
}
function generateStep(branch) {
return function (done) {
async.parallel([
argv.api && async.apply(require('./js_api'), branch),
argv.tests && async.apply(require('./yaml_tests'), branch)
].filter(Boolean), done);
};
}
var steps = [];
branches.forEach(function (branch) {
steps.push(
checkoutStep(branch),
updateStep(branch),
generateStep(branch)
);
});
async.series(steps, function (err) {
if (err) {
throw err;
}
});