diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index f1e26f1df..7e035d283 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -2527,6 +2527,16 @@ "tree": { "selfFreeing": true, "functions": { + "git_tree_create_updated": { + "args": { + "updates": { + "cType": "git_tree_update *", + "cppClassName": "Array", + "jsClassName": "Array", + "arrayElementCppClassName": "GitTreeUpdate" + } + } + }, "git_tree_entry_byid": { "return": { "ownedByThis": true @@ -2593,6 +2603,10 @@ } } }, + "tree_update": { + "hasConstructor": true, + "ignoreInit": true + }, "writestream": { "cType": "git_writestream", "needsForwardDeclaration": false diff --git a/generate/templates/partials/convert_from_v8.cc b/generate/templates/partials/convert_from_v8.cc index f7c4da469..6e707e1fe 100644 --- a/generate/templates/partials/convert_from_v8.cc +++ b/generate/templates/partials/convert_from_v8.cc @@ -48,12 +48,12 @@ {%elsif cppClassName == 'Array'%} Array *tmp_{{ name }} = Array::Cast(*info[{{ jsArg }}]); - from_{{ name }} = ({{ cType }})malloc(tmp_{{ name }}->Length() * sizeof({{ cType|replace '**' '*' }})); + from_{{ name }} = ({{ cType }})malloc(tmp_{{ name }}->Length() * sizeof({{ cType|unPointer }})); for (unsigned int i = 0; i < tmp_{{ name }}->Length(); i++) { {%-- // FIXME: should recursively call convertFromv8. --%} - from_{{ name }}[i] = Nan::ObjectWrap::Unwrap<{{ arrayElementCppClassName }}>(tmp_{{ name }}->Get(Nan::New(static_cast(i)))->ToObject())->GetValue(); + from_{{ name }}[i] = {%if not cType|isDoublePointer %}*{%endif%}Nan::ObjectWrap::Unwrap<{{ arrayElementCppClassName }}>(tmp_{{ name }}->Get(Nan::New(static_cast(i)))->ToObject())->GetValue(); } {%elsif cppClassName == 'Function'%} {%elsif cppClassName == 'Buffer'%} diff --git a/test/tests/tree.js b/test/tests/tree.js index aa98d4f3d..259ca2f86 100644 --- a/test/tests/tree.js +++ b/test/tests/tree.js @@ -39,6 +39,24 @@ describe("Tree", function() { }).done(done); }); + it("updates a tree", function () { + var repo = this.existingRepo; + var update = new NodeGit.TreeUpdate(); + update.action = NodeGit.Tree.UPDATE.REMOVE; + update.path = "README.md"; + return this.commit.getTree().then(function(tree) { + return tree.createUpdated(repo, 1, [update]); + }) + .then(function(treeOid) { + return repo.getTree(treeOid); + }) + .then(function(updatedTree) { + assert.throws(function () { + updatedTree.entryByName("README.md"); + }); + }); + }); + it("walks its entries and returns the same entries on both progress and end", function() { var repo = this.repository;