From 0c817523ee2a74a7912250056f474156dc755100 Mon Sep 17 00:00:00 2001 From: Gregg Caines Date: Sat, 24 Aug 2013 18:00:40 -0700 Subject: removed exec-sync. version 2.2.0 candidate --- lib/fetchGitData.js | 90 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 38 deletions(-) (limited to 'lib/fetchGitData.js') 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; -- cgit v1.2.3