diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index 0d3a1b81d..6085baea8 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -743,7 +743,20 @@ "graph": { "functions": { "git_graph_ahead_behind": { - "ignore": true + "args": { + "ahead": { + "shouldAlloc": true, + "isReturn": true + }, + "behind": { + "shouldAlloc": true, + "isReturn": true + } + }, + "isAsync": true, + "return": { + "isErrorCode": true + } } } }, diff --git a/generate/templates/filters/returns_info.js b/generate/templates/filters/returns_info.js index ff36e0c51..7eaf26e7a 100644 --- a/generate/templates/filters/returns_info.js +++ b/generate/templates/filters/returns_info.js @@ -1,3 +1,5 @@ +var isPointer = require("./is_pointer"); + module.exports = function(fn, argReturnsOnly, isAsync) { var result = []; var args = fn.args || []; @@ -11,6 +13,10 @@ module.exports = function(fn, argReturnsOnly, isAsync) { return_info.parsedName = isAsync ? "baton->" + return_info.name : return_info.name; return_info.isCppClassIntType = ~['Uint32', 'Int32'].indexOf(return_info.cppClassName); + return_info.needsDereference + = isAsync && + return_info.cppClassName == "Number" && + isPointer(return_info.cType); return_info.parsedClassName = (return_info.cppClassName || '').toLowerCase() + "_t"; return_info.returnNameOrName = return_info.returnName || return_info.name; return_info.jsOrCppClassName = return_info.jsClassName || return_info.cppClassName; diff --git a/generate/templates/partials/convert_to_v8.cc b/generate/templates/partials/convert_to_v8.cc index 1d2053791..aba2d9c97 100644 --- a/generate/templates/partials/convert_to_v8.cc +++ b/generate/templates/partials/convert_to_v8.cc @@ -22,7 +22,7 @@ {% if isCppClassIntType %} to = NanNew<{{ cppClassName }}>(({{ parsedClassName }}){{= parsedName =}}); {% else %} - to = NanNew<{{ cppClassName }}>({{= parsedName =}}); + to = NanNew<{{ cppClassName }}>({% if needsDereference %}*{% endif %}{{= parsedName =}}); {% endif %} {% elsif cppClassName == 'External' %} diff --git a/test/tests/graph.js b/test/tests/graph.js new file mode 100644 index 000000000..10f4db12b --- /dev/null +++ b/test/tests/graph.js @@ -0,0 +1,31 @@ +var assert = require("assert"); +var path = require("path"); +var local = path.join.bind(path, __dirname); + +describe("Graph", function() { + var NodeGit = require("../../"); + var Repository = NodeGit.Repository; + var Graph = NodeGit.Graph; + + var reposPath = local("../repos/workdir"); + + beforeEach(function() { + var test = this; + + return Repository.open(reposPath) + .then(function(repository) { + test.repository = repository; + }); + }); + + it("can get commits ahead/behind for 2 different commits", function() { + return Graph.aheadBehind( + this.repository, + "32789a79e71fbc9e04d3eff7425e1771eb595150", + "1729c73906bb8467f4095c2f4044083016b4dfde") + .then(function(result) { + assert.equal(result.ahead, 1); + assert.equal(result.behind, 1); + }); + }); +});