'use strict'; var path = require('path'); var spawn = require('child_process').spawn; var _ = require('lodash/fp'); var pify = require('pify'); var commitTemplate = '<%= (newContributor ? "Add" : "Update") %> @<%= username %> as a contributor'; var getRemoteOriginData = pify(cb => { var output = ''; var git = spawn('git', 'config --get remote.origin.url'.split(' ')); git.stdout.on('data', function (data) { output += data; }); git.stderr.on('data', cb); git.on('close', function () { cb(null, output); }); }); function parse(originUrl) { var result = /:(\w+)\/([A-Za-z0-9-_]+)/.exec(originUrl); if (!result) { return null; } return { projectOwner: result[1], projectName: result[2] }; } function getRepoInfo() { return getRemoteOriginData() .then(parse); } var spawnGitCommand = pify((args, cb) => { var git = spawn('git', args); git.stderr.on('data', cb); git.on('close', cb); }); function commit(options, data) { var files = options.files.concat(options.config); var absolutePathFiles = files.map(file => { return path.resolve(process.cwd(), file); }); return spawnGitCommand(['add'].concat(absolutePathFiles)) .then(() => { var commitMessage = _.template(options.commitTemplate || commitTemplate)(data); return spawnGitCommand(['commit', '-m', commitMessage]); }); } module.exports = { commit: commit, getRepoInfo: getRepoInfo };