diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index 5306e16b2..3d0562e77 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -4187,6 +4187,16 @@ "singletonCppClassName": "GitRepository" }, "functions": { + "git_tree_create_updated": { + "args": { + "updates": { + "cType": "git_tree_update *", + "cppClassName": "Array", + "jsClassName": "Array", + "arrayElementCppClassName": "GitTreeUpdate" + } + } + }, "git_tree_entry_byid": { "return": { "ownedByThis": true @@ -4361,6 +4371,10 @@ "../include/git_buf_converter.h" ] }, + "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 7fc74a29b..cad28ebfc 100644 --- a/generate/templates/partials/convert_from_v8.cc +++ b/generate/templates/partials/convert_from_v8.cc @@ -48,12 +48,12 @@ {%elsif cppClassName == 'Array'%} v8::Local tmp_{{ name }} = v8::Local::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 }}>(Nan::To(Nan::Get(tmp_{{ name }}, Nan::New(static_cast(i))).ToLocalChecked()).ToLocalChecked())->GetValue(); + from_{{ name }}[i] = {%if not cType|isDoublePointer %}*{%endif%}Nan::ObjectWrap::Unwrap<{{ arrayElementCppClassName }}>(Nan::To(Nan::Get(tmp_{{ name }}, Nan::New(static_cast(i))).ToLocalChecked()).ToLocalChecked())->GetValue(); } {%elsif cppClassName == 'Function'%} {%elsif cppClassName == 'Buffer'%} diff --git a/test/tests/tree.js b/test/tests/tree.js index e5272116d..98c5959e9 100644 --- a/test/tests/tree.js +++ b/test/tests/tree.js @@ -38,6 +38,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;