mercurial-bower-resolver
Version:
111 lines (91 loc) • 2.69 kB
JavaScript
;
// Constants:
Object.defineProperty(exports, '__esModule', {
value: true
});
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
// Dependencies:
var _child_process = require('child_process');
var _child_process2 = _interopRequireDefault(_child_process);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
var _tmp = require('tmp');
var _tmp2 = _interopRequireDefault(_tmp);
var ALPHA_NUMERIC_REVISION_REGEX = /^[a-f0-9]{4,40}$/;
var BRANCHES = 'branches';
var CLONE = 'clone';
var HG = 'hg';
var HG_REGEX = /^hg\+/i;
var NUMERIC_REVISION_REGEX = /^\d+$/;
var REVISION_FLAG = '-r';
var TAGS = 'tags';
var TRAILING_SLASHES = /\/+$/;
var UPDATE = 'up';exports['default'] = {
clone: clone,
branches: branches,
tags: tags,
update: update
};
function clone(source, directory) {
directory = directory || _tmp2['default'].dirSync();
return run({
command: CLONE,
args: [cleanSource(source), directory.name]
}).then(function () {
return directory;
});
}
function branches(directoryName) {
return run({
command: BRANCHES,
cwd: directoryName
});
}
function tags(directoryName) {
return run({
command: TAGS,
cwd: directoryName
});
}
function update(endpoint, directoryName) {
var target = endpoint.target;
var flags = [];
if (NUMERIC_REVISION_REGEX.test(target) || ALPHA_NUMERIC_REVISION_REGEX.test(target)) {
flags.push(REVISION_FLAG);
}
return run({
command: UPDATE,
args: flags.concat([endpoint.target]),
cwd: directoryName
});
}
function cleanSource(source) {
return source
// Change hg+ssh or hg+http or hg+https to ssh, http(s) respectively:
.replace(HG_REGEX, '')
// Remove trailing slashes:
.replace(TRAILING_SLASHES, '');
}
function run(options) {
var args = options.args || [];
var command = options.command;
var cwd = options.cwd || process.cwd();
return new _bluebird2['default'](function (resolve, reject) {
var hg = _child_process2['default'].spawn(HG, [command].concat(args), { cwd: cwd });
var stdout = '';
var stderr = '';
hg.stdout.on('data', function (data) {
return stdout += data.toString();
});
hg.stderr.on('data', function (data) {
return stderr += data.toString();
});
hg.on('exit', function () {
return resolve(stdout);
});
hg.on('error', function () {
return reject(stderr);
});
});
}
module.exports = exports['default'];