Skip to content

Commit ac1f09c

Browse files
committed
Fixes remaining tests, except commit history.
1 parent 89bc1a8 commit ac1f09c

15 files changed

Lines changed: 373 additions & 143 deletions

‎.gitignore‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/src/*
77
!/src/functions/copy.cc
88
!/src/wrapper.cc
9-
!/src/base.cc
9+
!/src/nodegit.cc
1010

1111
/include/*
1212
!/include/functions/copy.h

‎generate/descriptor.json‎

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,21 @@
3131
"return": {
3232
"cppClassName": "Wrapper"
3333
}
34+
},
35+
36+
"git_blob_create_frombuffer": {
37+
"ignore": false,
38+
"isAsync": true,
39+
"isPrototypeMethod": true,
40+
41+
"args": [
42+
{ "shouldAlloc": true, "isReturn": true },
43+
{ "isSelf": true }
44+
],
45+
46+
"return": {
47+
"isErrorCode": true
48+
}
3449
}
3550
}
3651
},
@@ -55,6 +70,31 @@
5570
"../include/signature.h"
5671
],
5772
"functions": {
73+
"git_commit_create": {
74+
"ignore": false,
75+
"jsFunctionName": "createCommit",
76+
"cppFunctionName": "CreateCommit",
77+
"isAsync": true,
78+
"return": {
79+
"isErrorCode": true
80+
},
81+
"args": [
82+
{ "shouldAlloc": true, "isReturn": true },
83+
{ "isSelf": true },
84+
{ "isOptional": true },
85+
{},
86+
{},
87+
{ "isOptional": true },
88+
{},
89+
{},
90+
{},
91+
{
92+
"cType": "const git_commit **",
93+
"arrayElementCppClassName": "GitCommit"
94+
}
95+
]
96+
},
97+
5898
"git_commit_lookup": {
5999
"ignore": false,
60100
"args": [{}, { "shouldAlloc": true, "isSelf": true }]
@@ -503,8 +543,51 @@
503543
"cType": "git_treebuilder",
504544

505545
"dependencies": [
506-
"tree.h"
507-
]
546+
"../include/tree.h",
547+
"../include/oid.h"
548+
],
549+
550+
"functions": {
551+
"git_treebuilder_create": {
552+
"ignore": false,
553+
"cppFunctionName": "Create",
554+
"jsFunctionName": "create",
555+
"isAsync": false,
556+
"args": [{}, { "isSelf": true }]
557+
},
558+
"git_treebuilder_insert": {
559+
"ignore": false,
560+
"args": [
561+
{ "isReturn": true },
562+
{ "isSelf": true }
563+
],
564+
"isAsync": false,
565+
"return": {
566+
"isErrorCode": true
567+
}
568+
},
569+
"git_treebuilder_remove": {
570+
"ignore": false,
571+
"args": [
572+
{ "isSelf": true }
573+
],
574+
"return": {
575+
"isErrorCode": true
576+
}
577+
},
578+
"git_treebuilder_write": {
579+
"ignore": false,
580+
"isAsync": true,
581+
"args": [
582+
{ "shouldAlloc": true, "isReturn": true },
583+
{},
584+
{ "isSelf": true }
585+
],
586+
"return": {
587+
"isErrorCode": true
588+
}
589+
}
590+
}
508591
},
509592

510593
"tree_entry": {

‎generate/setup.js‎

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ var version = require("../package.json").libgit2.version;
55
var descriptor = require("./descriptor.json");
66
var libgit2 = require("./v" + version + ".json");
77

8-
// This file was generated by @nkallen.
9-
var legacy = require("./nkallen.json");
10-
118
// Extracted types.
129
var typeMap = require("./types.json");
1310

@@ -30,7 +27,8 @@ typeMap.__proto__ = {
3027
"git_buf *": { cpp: "Buf", js: "Buf" },
3128
"git_branch_iterator *": { cpp: "BranchIterator", js: "Iterator" },
3229
"git_branch_iterator **": { cpp: "BranchIterator", js: "Iterator" },
33-
"git_branch_t *": { cpp: "GitBranch", js: "Branch" }
30+
"git_branch_t *": { cpp: "GitBranch", js: "Branch" },
31+
"const git_commit *[]": { cpp: "Array", js: "Array" }
3432
};
3533

3634
var files = [];
@@ -55,7 +53,9 @@ function camelCase(str) {
5553
}).join("");
5654
}
5755

58-
Object.keys(descriptor).forEach(function(fileName, index) {
56+
var fileNames = Object.keys(descriptor);
57+
58+
fileNames.forEach(function(fileName, index) {
5959
var file = descriptor[fileName];
6060

6161
// Constants.
@@ -84,14 +84,10 @@ Object.keys(descriptor).forEach(function(fileName, index) {
8484
file.freeFunctionName = "git_" + fileName + "_free";
8585
}
8686

87-
if ((!cFile || !cFile.functions) && !file.isStruct) {
88-
return;
89-
}
90-
9187
// TODO Obsolete this.
9288
if (file.isStruct) {
9389
// No functions.
94-
cFile = file;
90+
cFile = Object.create(file);
9591
cFile.functions = [];
9692
}
9793

@@ -101,9 +97,7 @@ Object.keys(descriptor).forEach(function(fileName, index) {
10197
}
10298

10399

104-
var legacyFile = legacy.filter(function(currentFile) {
105-
return currentFile.filename === file.filename;
106-
})[0] || {};
100+
var legacyFile = {};
107101

108102
if (file.jsClassName.indexOf("Git") === 0) {
109103
file.jsClassName = file.jsClassName.slice(3);
@@ -138,7 +132,7 @@ Object.keys(descriptor).forEach(function(fileName, index) {
138132
});
139133

140134
if (deps) {
141-
file.dependencies.push.apply(file.dependencies, deps);
135+
file.dependencies.unshift.apply(file.dependencies, deps);
142136
}
143137

144138
// Add to the type's list if it's new.
@@ -170,19 +164,23 @@ Object.keys(descriptor).forEach(function(fileName, index) {
170164
// Used to identify a missing function descriptor later on.
171165
var ident = {};
172166

173-
//Object.keys(file.functions || {}).forEach(function(functionName) {
174-
// if (cFile.functions.indexOf(functionName) === -1 && functionName) {
175-
// cFile.functions.push(functionName);
176-
// }
177-
//});
167+
// Cache the existing object, before overwriting.
168+
var functions = file.functions;
169+
var iterateFunctions = Object.keys(file.functions || {});
170+
171+
file.functions = [];
172+
173+
(cFile.functions.length ? cFile.functions : iterateFunctions).forEach(function(functionName, index) {
174+
if (iterateFunctions.indexOf(functionName) === -1) {
175+
return;
176+
}
178177

179-
file.functions = cFile.functions.map(function(functionName, index) {
180178
var funcDescriptor = libgit2.functions[functionName];
181-
var descriptor = legacyFile.functions ? legacyFile.functions[index] || {} : {};
179+
var descriptor = {};
182180
var cType = file.cType || "git";
183181

184182
// From the hand maintained file.
185-
var functionDescriptor = file.functions ? file.functions[functionName] || ident : ident;
183+
var functionDescriptor = functions ? functions[functionName] || ident : ident;
186184

187185
if (!functionName || !funcDescriptor) { return; }
188186

@@ -195,10 +193,6 @@ Object.keys(descriptor).forEach(function(fileName, index) {
195193

196194
var trimmedName = functionName.slice(cType.length + 1);
197195

198-
if (trimmedName === "new") {
199-
trimmedName = "new2";
200-
}
201-
202196
descriptor.cppFunctionName = functionDescriptor.cppFunctionName || titleCase(trimmedName);
203197
descriptor.jsFunctionName = functionDescriptor.jsFunctionName || camelCase(trimmedName);
204198

@@ -273,20 +267,33 @@ Object.keys(descriptor).forEach(function(fileName, index) {
273267
};
274268

275269
if (typeMap[arg.type]) {
276-
return {
270+
var retVal = {
277271
name: arg.name,
278272
cType: arg.type,
279273
cppClassName: typeMap[arg.type].cpp,
280274
jsClassName: typeMap[arg.type].js,
281275
comment: arg.comment,
282-
isOptional: isOptional() || true,
283276
isReturn: isReturn() || false,
284277
isSelf: isSelf() || false,
285278
shouldAlloc: manualArgs[index] ? manualArgs[index].shouldAlloc || false : false
286279
};
280+
281+
if (manualArgs[index] && manualArgs[index].arrayElementCppClassName) {
282+
retVal.arrayElementCppClassName = manualArgs[index].arrayElementCppClassName;
283+
}
284+
285+
if (manualArgs[index] && manualArgs[index].cType) {
286+
retVal.cType = manualArgs[index].cType;
287+
}
288+
289+
if (isOptional()) {
290+
retVal.isOptional = true;
291+
}
292+
293+
return retVal;
287294
}
288295

289-
return {};
296+
throw new Error("Missing typedef for " + arg.type);
290297
});
291298

292299
// By default all methods are synchronous.
@@ -302,7 +309,9 @@ Object.keys(descriptor).forEach(function(fileName, index) {
302309
descriptor.isAsync = functionDescriptor.isAsync;
303310
}
304311

305-
return descriptor;
312+
if (Object.keys(functions || {}).indexOf(descriptor.cFunctionName) > -1) {
313+
file.functions.push(descriptor);
314+
}
306315
});
307316

308317
files.push(file);

‎generate/templates/asyncFunction.cc.ejs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ NAN_METHOD(<%- cppClassName %>::<%- functionInfo.cppFunctionName %>) {
2222
<% if (!arg.isReturn) { -%>
2323
<% if (arg.isSelf) { -%>
2424
baton-><%- arg.name %> = ObjectWrap::Unwrap<<%- arg.cppClassName %>>(args.This())->GetValue();
25-
<% } else { -%>
25+
<% } else if (arg.name) { -%>
2626
<% include convertFromV8.cc.ejs -%>
2727
<% if (!arg.isPayload) { -%>
2828
baton-><%- arg.name %> = from_<%- arg.name %>;

‎generate/templates/guardArguments.cc.ejs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
var arg = functionInfo.args[cArg];
55
if (arg.isReturn || arg.isSelf || arg.isPayload) continue;
66
-%>
7-
<% if (arg.isOptional == false) { -%>
7+
<% if (!arg.isOptional) { -%>
88
if (args.Length() == <%- jsArg %> || !args[<%- jsArg %>]->Is<%- cppClassName2v8ValueClassName(arg.cppClassName) %>()) {
99
return NanThrowError("<%- arg.jsClassName %> <%- arg.name %> is required.");
1010
}

‎generate/templates/header.h.ejs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010

1111
#include "git2.h"
1212

13+
<% if (typeof dependencies != 'undefined') { -%>
14+
<% for (d in dependencies) { -%>
15+
#include "<%- dependencies[d] %>"
16+
<% } -%>
17+
<% } -%>
18+
1319
<% if (typeof forwardDeclare !== "undefined") { %>
1420
// Forward declaration.
1521
struct <%- cType %> {

0 commit comments

Comments
 (0)