@busy-web/deploy
Version:
busy-web ember-cli-deploy addon.
129 lines (114 loc) • 2.96 kB
JavaScript
/**
* @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);
});
}
};