diff --git a/generate/descriptor.json b/generate/descriptor.json index bd5b1d2e6..8bdfae792 100644 --- a/generate/descriptor.json +++ b/generate/descriptor.json @@ -1,6 +1,32 @@ { "attr": { - "cType": null + "cType": null, + + "functions": { + "git_attr_add_macro": { + "ignore": false, + "isConstructorMethod": true + }, + + "git_attr_cache_flush": { + "ignore": false + }, + + "git_attr_foreach": { + "ignore": true, + "return": { + "isErrorCode": true + } + }, + + "git_attr_get": { + "ignore": false + }, + + "git_attr_get_many": { + "ignore": false + } + } }, "blame": { diff --git a/generate/setup.js b/generate/setup.js index 1d1eeddc8..7389da288 100644 --- a/generate/setup.js +++ b/generate/setup.js @@ -75,6 +75,7 @@ fileNames.forEach(function(fileName, index) { // Constants. file.filename = fileName + ".h"; file.ignore = typeof file.ignore == "boolean" ? file.ignore : false; + //FIXME file.cppClassName = "Git" + titleCase(fileName); file.jsClassName = file.cppClassName; @@ -193,7 +194,7 @@ fileNames.forEach(function(fileName, index) { var funcDescriptor = libgit2.functions[functionName]; var descriptor = {}; - var cType = file.cType || "git"; + var cType = file.cType || "git_" + file.filename.slice(0, -2); // From the hand maintained file. var functionDescriptor = functions ? functions[functionName] || ident : ident; diff --git a/generate/templates/asyncFunction.cc.ejs b/generate/templates/asyncFunction.cc.ejs index 29755b4a2..48489a388 100644 --- a/generate/templates/asyncFunction.cc.ejs +++ b/generate/templates/asyncFunction.cc.ejs @@ -1,5 +1,3 @@ -#include "../include/functions/copy.h" - /** <% include doc.cc.ejs -%> */ diff --git a/generate/types.json b/generate/types.json index 3924ce585..9359790dd 100644 --- a/generate/types.json +++ b/generate/types.json @@ -1,7 +1,7 @@ { "git_attr_get": { - "cpp": "AttrGet", - "js": "attrGet" + "cpp": "Get", + "js": "get" }, "const char **": { "js": "String", @@ -24,16 +24,16 @@ "cpp": "Number" }, "git_attr_get_many": { - "cpp": "AttrGetMany", - "js": "attrGetMany" + "cpp": "GetMany", + "js": "getMany" }, "size_t": { "js": "Number", "cpp": "Uint32" }, "git_attr_foreach": { - "cpp": "AttrForeach", - "js": "attrForeach" + "cpp": "Foreach", + "js": "foreach" }, "git_attr_foreach_cb": { "js": "AttrForeachCb", @@ -44,16 +44,16 @@ "cpp": "void" }, "git_attr_cache_flush": { - "cpp": "AttrCacheFlush", - "js": "attrCacheFlush" + "cpp": "CacheFlush", + "js": "cacheFlush" }, "void": { "js": "void", "cpp": "void" }, "git_attr_add_macro": { - "cpp": "AttrAddMacro", - "js": "attrAddMacro" + "cpp": "AddMacro", + "js": "addMacro" }, "git_blob_free": { "cpp": "Free", @@ -2376,8 +2376,8 @@ "js": "peel" }, "git_threads_init": { - "cpp": "ThreadsInit", - "js": "threadsInit" + "cpp": "Init", + "js": "init" }, "git_threads_shutdown": { "cpp": "ThreadsShutdown", @@ -2617,44 +2617,44 @@ "js": "Attr" }, "git_attr_get *": { - "cpp": "AttrGet", - "js": "attrGet" + "cpp": "Get", + "js": "get" }, "const git_attr_get *": { - "cpp": "AttrGet", - "js": "attrGet" + "cpp": "Get", + "js": "get" }, "git_attr_get_many *": { - "cpp": "AttrGetMany", - "js": "attrGetMany" + "cpp": "GetMany", + "js": "getMany" }, "const git_attr_get_many *": { - "cpp": "AttrGetMany", - "js": "attrGetMany" + "cpp": "GetMany", + "js": "getMany" }, "git_attr_foreach *": { - "cpp": "AttrForeach", - "js": "attrForeach" + "cpp": "Foreach", + "js": "foreach" }, "const git_attr_foreach *": { - "cpp": "AttrForeach", - "js": "attrForeach" + "cpp": "Foreach", + "js": "foreach" }, "git_attr_cache_flush *": { - "cpp": "AttrCacheFlush", - "js": "attrCacheFlush" + "cpp": "CacheFlush", + "js": "cacheFlush" }, "const git_attr_cache_flush *": { - "cpp": "AttrCacheFlush", - "js": "attrCacheFlush" + "cpp": "CacheFlush", + "js": "cacheFlush" }, "git_attr_add_macro *": { - "cpp": "AttrAddMacro", - "js": "attrAddMacro" + "cpp": "AddMacro", + "js": "addMacro" }, "const git_attr_add_macro *": { - "cpp": "AttrAddMacro", - "js": "attrAddMacro" + "cpp": "AddMacro", + "js": "addMacro" }, "git_blame": { "cpp": "GitBlame", @@ -8513,12 +8513,12 @@ "js": "peel" }, "git_threads_init *": { - "cpp": "ThreadsInit", - "js": "threadsInit" + "cpp": "Init", + "js": "init" }, "const git_threads_init *": { - "cpp": "ThreadsInit", - "js": "threadsInit" + "cpp": "Init", + "js": "init" }, "git_threads_shutdown *": { "cpp": "ThreadsShutdown", diff --git a/lib/attr.js b/lib/attr.js new file mode 100644 index 000000000..fe41d68a1 --- /dev/null +++ b/lib/attr.js @@ -0,0 +1,13 @@ +var NodeGit = require("../"); + +var Attr = NodeGit.Attr; + +Attr.Check = { + FILE_THEN_INDEX: 0, + INDEX_THEN_FILE: 1, + INDEX_ONLY: 2, + + NO_SYSTEM: 1 << 2 +}; + +module.exports = Attr; diff --git a/lib/nodegit.js b/lib/nodegit.js index 9b2cdd428..e52aa1760 100644 --- a/lib/nodegit.js +++ b/lib/nodegit.js @@ -24,7 +24,7 @@ descriptors.forEach(function(descriptor) { var original = null; // Special case when you have a prototype method. - if (asyncFunc.isPrototypeMethod) { + if (asyncFunc.isPrototypeMethod && Ctor.prototype) { original = Ctor.prototype[asyncFunc.jsFunctionName]; Ctor.prototype[asyncFunc.jsFunctionName] = promisify(original); } @@ -59,4 +59,4 @@ promisify(exports); exports.version = require("../package").version; // Initialize threads. -exports.Threads.threadsInit(); +exports.Threads.init(); diff --git a/test/tests/attr.js b/test/tests/attr.js new file mode 100644 index 000000000..b6973cf40 --- /dev/null +++ b/test/tests/attr.js @@ -0,0 +1,39 @@ +var assert = require("assert"); +var path = require("path"); + +describe("Blob", function() { + var reposPath = path.resolve("test/repos/workdir/.git"); + + var Repository = require("../../lib/repository"); + var Attr = require("../../lib/attr"); + + before(function() { + var test = this; + + return Repository.open(reposPath).then(function(repository) { + test.repository = repository; + }); + }); + + it("can add a macro definition", function() { + var error = Attr.addMacro(this.repository, "binary", "-diff -crlf"); + + assert.equal(error, 0); + }); + + it("can flush the attr cache", function() { + Attr.cacheFlush(this.repository); + }); + + // FIXME Currently segfaults. + it.skip("can lookup the value of a git attribute", function() { + var flags = Attr.Check.NO_SYSTEM; + var getAttr = Attr.get(this.repository, flags, ".gitattributes", "test"); + + return getAttr.then(function(val) { + console.log(val); + }).catch(function(ex) { + console.log(ex); + }); + }); +});