From 76b3eab6d1aeb02ea96a40e1e9d5cd07c3b8e6f0 Mon Sep 17 00:00:00 2001 From: Rafael Gieschke Date: Wed, 22 Mar 2017 16:00:54 +0100 Subject: [PATCH 1/3] Make TreeUpdate constructible --- generate/input/descriptor.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index f1e26f1df..b9829aa19 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -2593,6 +2593,10 @@ } } }, + "tree_update": { + "hasConstructor": true, + "ignoreInit": true + }, "writestream": { "cType": "git_writestream", "needsForwardDeclaration": false From bb4c0bd9720db7d30132a5fc0512b5e86080b429 Mon Sep 17 00:00:00 2001 From: Rafael Gieschke Date: Wed, 22 Mar 2017 18:38:23 +0100 Subject: [PATCH 2/3] Make Tree#createUpdated accept Array --- generate/input/descriptor.json | 10 ++++++++++ generate/templates/partials/convert_from_v8.cc | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index b9829aa19..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 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'%} From 8dae43af3b6941d99018693c44caa5146355e302 Mon Sep 17 00:00:00 2001 From: Rafael Gieschke Date: Wed, 10 May 2017 02:29:19 +0200 Subject: [PATCH 3/3] Add test for Tree#createUpdated --- test/tests/tree.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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;