UNPKG

@busy-web/deploy

Version:

busy-web ember-cli-deploy addon.

129 lines (114 loc) 2.96 kB
/** * @module Helpers * */ var RSVP = require('rsvp'); var exec = require('child_process').exec; /** * `git helper methods` * */ module.exports = { revision: function() { return new RSVP.Promise(function(resolve, reject) { exec("git log -1 --format=%H", function(err, stdout) { if (err instanceof Error) { reject(err); } resolve(stdout.slice(0, 7)); }); }); }, commit: function(message) { return new RSVP.Promise(function(resolve, reject) { exec(`git commit -am '${message}'`, function(err, stdout) { if (err instanceof Error) { reject(err); } resolve(stdout); }); }); }, checkout: function(branch) { return new RSVP.Promise(function(resolve, reject) { exec(`git checkout ${branch}`, function(err, stdout) { if (err instanceof Error) { reject(err); } resolve(stdout); }); }); }, pull: function(branch, remote) { remote = typeof remote === 'string' && remote.length ? remote : 'origin'; return new RSVP.Promise(function(resolve, reject) { exec(`git pull ${remote} ${branch}`, function(err, stdout) { if (err instanceof Error) { reject(err); } resolve(stdout); }); }); }, push: function(branch, remote) { remote = typeof remote === 'string' && remote.length ? remote : 'origin'; return new RSVP.Promise(function(resolve, reject) { exec(`git push ${remote} ${branch}`, function(err, stdout) { if (err instanceof Error) { reject(err); } resolve(stdout); }); }); }, lastUpdateHash: function(releaseString) { return new RSVP.Promise(function(resolve, reject) { exec("git log -20 --format='oneline'", function(err, stdout) { if (err instanceof Error) { reject(err); } var regex = new RegExp(releaseString); var index = stdout.search(regex); // remove everything after the hash var hash = stdout.slice(0, index-1); // remove everything before the hash var startHash = hash.lastIndexOf("\n"); hash = hash.slice(startHash+1); // remove extras after the hash if no hash // was found var endHash = hash.indexOf(" "); hash = hash.slice(0, endHash); // return the hash resolve(hash); }); }); }, diff: function(target) { return new RSVP.Promise(function(resolve, reject) { exec(`git diff ${target}`, function(err, stdout) { if (err instanceof Error) { if (/maxBuffer/.test(err.toString())) { resolve(true); } else { reject(err); } } resolve(stdout.length > 0); }); }); }, getBranch(branch, ui) { ui.write(` - git checkout ${branch}`); return this.checkout(branch).then(() => { ui.write(` - git pull origin ${branch}`); return this.pull(branch); }); }, updateBranch(branch, message, ui) { ui.write(` - git commit -am ${message}`); return this.commit(message).then(() => { ui.write(` - git push origin ${branch}`); return this.push(branch); }); } };