From 35353e022a90f07f225dc7b0e69f0c23d3c4f4c9 Mon Sep 17 00:00:00 2001 From: Dimitri Jorge Date: Fri, 24 Apr 2015 15:02:11 +0200 Subject: [PATCH 1/2] Don't crash prevNext when branch is local only --- lib/git.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/git.js b/lib/git.js index 95c0d09..4995683 100644 --- a/lib/git.js +++ b/lib/git.js @@ -66,13 +66,18 @@ git.parse = function(folder, cb) { data.remotes = stdout.split('\n'); data.remotes.pop(); data.remote = (data.remotes.indexOf('origin') === -1) - ? data.remotes[0] : 'origin'; + ? data.remotes[0] : ''; return cb(null, data); }); }; var getPrevNext = function(data, cb) { - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git log "+data.remote+"/"+data.branch+" --pretty=oneline", + var prefix = ''; + + if (data.remote !== '') + prefix = data.remote + '/'; + + exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git log "+ prefix + data.branch +" --pretty=oneline", {timeout: TIMEOUT}, function(err, stdout, stderr) { if(err !== null) From 39023e29f6a4663980d95ccbee05c93b5504d2ee Mon Sep 17 00:00:00 2001 From: Dimitri Jorge Date: Fri, 24 Apr 2015 16:30:48 +0200 Subject: [PATCH 2/2] Add a call to waterfall that check if branch exists on remote --- lib/git.js | 28 +++++++++++++++++++++++----- test/git_scenario.mocha.js | 2 ++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/lib/git.js b/lib/git.js index 4995683..2332cf5 100644 --- a/lib/git.js +++ b/lib/git.js @@ -66,7 +66,19 @@ git.parse = function(folder, cb) { data.remotes = stdout.split('\n'); data.remotes.pop(); data.remote = (data.remotes.indexOf('origin') === -1) - ? data.remotes[0] : ''; + ? data.remotes[0] : 'origin'; + return cb(null, data); + }); + }; + + var getRemoteBrancheExistence = function(data, cb) { + exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git show-ref refs/remotes/"+data.remote+"/"+data.branch, {timeout: TIMEOUT}, + function(err, stdout, stderr) { + if (err) + data.branch_exists_on_remote = false; + else + data.branch_exists_on_remote = true; + return cb(null, data); }); }; @@ -74,7 +86,7 @@ git.parse = function(folder, cb) { var getPrevNext = function(data, cb) { var prefix = ''; - if (data.remote !== '') + if (data.branch_exists_on_remote) prefix = data.remote + '/'; exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git log "+ prefix + data.branch +" --pretty=oneline", @@ -115,7 +127,7 @@ git.parse = function(folder, cb) { }); }; - async.waterfall([getUrl, getMeta, getStaged, getBranch, getRemote, getPrevNext, getDate], + async.waterfall([getUrl, getMeta, getStaged, getBranch, getRemote, getRemoteBrancheExistence, getPrevNext, getDate], function(err, data) { if (err !== null) return cb(err); @@ -125,10 +137,16 @@ git.parse = function(folder, cb) { git.isUpdated = function(folder, cb) { git.parse(folder, function(err, data) { + var prefix = ''; + if (err !== null) return cb(err); - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git remote update >> /dev/null 2>&1; git log "+data.remote - +"/"+data.branch+" --pretty=oneline -n 1", {timeout: 60000}, + + if (data.branch_exists_on_remote) + prefix = data.remote + '/'; + + exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git remote update >> /dev/null 2>&1; git log "+ prefix+data.branch+ + " --pretty=oneline -n 1", {timeout: 60000}, function(err, stdout, stderr) { var res = {}; diff --git a/test/git_scenario.mocha.js b/test/git_scenario.mocha.js index 83afe05..5ccdcf4 100644 --- a/test/git_scenario.mocha.js +++ b/test/git_scenario.mocha.js @@ -45,6 +45,8 @@ if (shell.which('git') !== null) { meta.type.should.equal('git'); meta.branch.should.equal('master'); + + should(meta.branch_exists_on_remote).be.true should.exist(meta.comment); should.exist(meta.url); should.exist(meta.revision);