From 504756635a64c99d7ac25f16933f74df216783cb Mon Sep 17 00:00:00 2001 From: Steve Smith Date: Wed, 4 Mar 2015 10:35:27 -0500 Subject: [PATCH 1/2] Adds support for strarray in structs Pathspecs happen a ton in options structs, we can finally checkout individual files, etc. --- generate/input/descriptor.json | 5 +++++ generate/templates/partials/field_accessors.cc | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index e6dcccfc5..259faacd2 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -1605,6 +1605,11 @@ } } }, + "strarray": { + "dependencies": [ + "../include/str_array_converter.h" + ] + }, "stream": { "ignore": true, "cDependencies": [ diff --git a/generate/templates/partials/field_accessors.cc b/generate/templates/partials/field_accessors.cc index 235a8888a..f5f3aa448 100644 --- a/generate/templates/partials/field_accessors.cc +++ b/generate/templates/partials/field_accessors.cc @@ -43,7 +43,7 @@ NanAssignPersistent(wrapper->{{ field.name }}, {{ field.name }}); - wrapper->raw->{{ field.name }} = {% if not field.cType | isPointer %}*{% endif %}ObjectWrap::Unwrap<{{ field.cppClassName }}>({{ field.name }}->ToObject())->GetValue(); + wrapper->raw->{{ field.name }} = {% if not field.cType | isPointer %}*{% endif %}{% if field.cppClassName == 'GitStrarray' %}StrArrayConverter::Convert({{ field.name }}->ToObject()){% else %}ObjectWrap::Unwrap<{{ field.cppClassName }}>({{ field.name }}->ToObject())->GetValue(){% endif %}; {% elsif field.isCallbackFunction %} if (wrapper->{{ field.name }} != NULL) { From b09fa0269eeec02cad3ba5ef4f457641915fcace Mon Sep 17 00:00:00 2001 From: Steve Smith Date: Thu, 5 Mar 2015 09:42:51 -0500 Subject: [PATCH 2/2] Add test for struct strarray in checkout --- test/tests/checkout.js | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/test/tests/checkout.js b/test/tests/checkout.js index a157761f1..5819e855f 100644 --- a/test/tests/checkout.js +++ b/test/tests/checkout.js @@ -1,5 +1,6 @@ var assert = require("assert"); var path = require("path"); +var fse = require("fs-extra"); var local = path.join.bind(path, __dirname); describe("Checkout", function() { @@ -7,8 +8,12 @@ describe("Checkout", function() { var Repository = NodeGit.Repository; var Checkout = NodeGit.Checkout; + var readMeName = "README.md"; + var packageJsonName = "package.json"; var packageJsonOid = "0fa56e90e096a4c24c785206b826ab914ea3de1e"; var reposPath = local("../repos/workdir"); + var readMePath = local("../repos/workdir/" + readMeName); + var packageJsonPath = local("../repos/workdir/" + packageJsonName); beforeEach(function() { var test = this; @@ -33,6 +38,42 @@ describe("Checkout", function() { }); }); + it("can force checkout a single file", function() { + var test = this; + + var packageContent = fse.readFileSync(packageJsonPath, "utf-8"); + var readmeContent = fse.readFileSync(readMePath, "utf-8"); + + assert.notEqual(packageContent, ""); + assert.notEqual(readmeContent, ""); + + fse.outputFileSync(readMePath, ""); + fse.outputFileSync(packageJsonPath, ""); + + var opts = { + checkoutStrategy: Checkout.STRATEGY.FORCE, + paths: packageJsonName + }; + + return Checkout.head(test.repository, opts) + .then(function() { + var resetPackageContent = fse.readFileSync(packageJsonPath, "utf-8"); + var resetReadmeContent = fse.readFileSync(readMePath, "utf-8"); + + assert.equal(resetPackageContent, packageContent); + assert.equal(resetReadmeContent, ""); + + var resetOpts = { + checkoutStrategy: Checkout.STRATEGY.FORCE + }; + + return Checkout.head(test.repository, resetOpts); + }).then(function() { + var resetContent = fse.readFileSync(readMePath, "utf-8"); + assert.equal(resetContent, readmeContent); + }); + }); + it("can checkout by tree", function() { var test = this;