aboutsummaryrefslogtreecommitdiff
path: root/lib/fetchGitData.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/fetchGitData.js')
-rw-r--r--lib/fetchGitData.js90
1 files changed, 52 insertions, 38 deletions
diff --git a/lib/fetchGitData.js b/lib/fetchGitData.js
index 629d650..a77b4a8 100644
--- a/lib/fetchGitData.js
+++ b/lib/fetchGitData.js
@@ -1,41 +1,39 @@
-var exec = require("exec-sync");
+var exec = require('child_process').exec;
var logger = require('./logger')();
-var fetchGitData = function(git) {
+var fetchGitData = function(git, cb) {
+ if (!cb){
+ throw new Error("fetchGitData requires a callback");
+ }
var i;
var execGit = true;
var head = {
"author_name": {
"format": "'%aN'",
- "default": "Unknown Author"
},
"author_email": {
"format": "'%ae'",
- "default": ""
},
"committer_name": {
"format": "'%cN'",
- "default": "Unknown Committer"
},
"committer_email": {
"format": "'%ce'",
- "default" :""
},
"message": {
"format": "'%s'",
- "default": "Unknown Commit Message"
}
};
var remotes = {};
//-- Malformed/undefined git object
if ('undefined' === typeof git) {
- throw new Error('No options passed');
+ return cb(new Error('No options passed'));
} else if (!git.hasOwnProperty('head')) {
- throw new Error('You must provide the head');
+ return cb(new Error('You must provide the head'));
} else if (!git.head.hasOwnProperty('id')) {
- throw new Error('You must provide the head.id');
+ return cb(new Error('You must provide the head.id'));
}
function saveRemote(name, url, push) {
@@ -71,37 +69,53 @@ var fetchGitData = function(git) {
}
//-- Use git?
- try {
- exec("git log -1 " + git.head.id + " --pretty=format:'%H'");
- } catch (e) {
- execGit = false;
- }
-
- //-- Head
- for (i in head) {
- if (!git.head.hasOwnProperty(i)) {
- if (execGit) {
- git.head[i] = exec("git log -1 " + git.head.id + " --pretty=format:" + head[i].format);
- } else {
- git.head[i] = head[i].default;
- }
+ exec("git log -1 " + git.head.id + " --pretty=format:'%H'", function(err, response){
+ if (err){
+ // git is not available...
+ git.head.author_name = git.head.author_name || "Unknown Author";
+ git.head.author_email = git.head.author_email || "";
+ git.head.committer_name = git.head.committer_name || "Unknown Committer";
+ git.head.committer_email = git.head.committer_email || "";
+ git.head.message = git.head.message || "Unknown Commit Message";
+ return cb(null, git);
}
- }
-
- if (execGit) {
-
- //-- Branch
- git.branch = exec("git branch").split("\n")[0].replace(/^\*\ /, "").trim();
- exec("git remote -v").split("\n").forEach(function(remote) {
- remote = remote.split(/\s/);
- saveRemote(remote[0], remote[1]);
+ //-- Head
+ var commands = [];
+ var fields = [];
+ for (var field in head) {
+ fields.push(field);
+ var command = "git log -1 " + git.head.id + " --pretty=format:" + head[field].format;
+ commands.push(command);
+ }
+ var i = 0;
+ var remaining = commands.length;
+ commands.forEach(function(command){
+ var field = fields[i];
+ i++;
+ exec(command, function(err, response){
+ if (err) return cb(err);
+ git.head[field] = response;
+ remaining--;
+ if (remaining === 0){
+ //-- Branch
+ exec("git branch", function(err, branches){
+ if (err) return cb(err);
+ git.branch = branches.split("\n")[0].replace(/^\*\ /, "").trim();
+ exec("git remote -v", function(err, remotes){
+ if (err) return cb(err);
+ remotes.split("\n").forEach(function(remote) {
+ remote = remote.split(/\s/);
+ saveRemote(remote[0], remote[1]);
+ });
+ return cb(null, git);
+ });
+ });
+ }
+ });
});
-
- }
-
- return git;
-
+ });
};
+
module.exports = fetchGitData;