Skip to content

Commit ca509a8

Browse files
committed
Adding in experiments.
1 parent 135104e commit ca509a8

File tree

10 files changed

+3643
-266862
lines changed

10 files changed

+3643
-266862
lines changed

browser.js

100755100644
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
/**
2+
* This code is auto-generated; unless you know what you're doing, do not modify!
3+
**/
4+
15
// Used to detect for Cygwin
26
var os = require('os');
37

build/codegen/compare.json

Lines changed: 3452 additions & 1162 deletions
Large diffs are not rendered by default.

build/codegen/descriptor.json

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,31 @@
156156
},
157157

158158
"repository": {
159-
"ignore": false
159+
"ignore": false,
160+
161+
"functions": {
162+
"git_repository_open": {
163+
"isAsync": true,
164+
"isConstructorMethod": true,
165+
166+
"args": {
167+
"out": {
168+
"isReturn": true
169+
}
170+
}
171+
},
172+
173+
"git_repository_init": {
174+
"isAsync": true,
175+
"isConstructorMethod": true,
176+
177+
"args": {
178+
"out": {
179+
"isReturn": true
180+
}
181+
}
182+
}
183+
}
160184
},
161185

162186
"reset": {

build/codegen/generate.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ try {
1212

1313
var idefs = require("./compare");
1414

15+
var emBrowserTemplate = ejs.compile(
16+
"" + fs.readFileSync(String(__dirname + "/templates/em.browser.js.ejs")), {
17+
filename: "browser.js"
18+
});
19+
1520
var emClassTemplate = ejs.compile(
1621
"" + fs.readFileSync(String(__dirname + "/templates/em.class.js.ejs")), {
1722
filename: "class.js"
@@ -53,3 +58,6 @@ Object.keys(idefs).forEach(function(keyName) {
5358

5459
fs.writeFileSync(
5560
__dirname + "/../emscripten/nodegit.js", emNodegitTemplate({ files: idefs }));
61+
62+
fs.writeFileSync(
63+
__dirname + "/../../browser.js", emBrowserTemplate());

build/codegen/t.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,20 +166,32 @@ Object.keys(descriptor).forEach(function(fileName, index) {
166166

167167
var args = descriptor.args || [];
168168
var typeDescriptor = args.length ? args[0].type || "" : "";
169-
var isCtor = typeDescriptor.indexOf("**") === typeDescriptor.length - 2;
169+
170+
var functionDescriptor = file.functions ? file.functions[functionName] || {} : {};
171+
172+
var isCtor = Boolean(functionDescriptor.isConstructorMethod);
173+
170174
descriptor.isConstructorMethod = isCtor;
171175

172176
// Set the prototype method argument.
173177
descriptor.isPrototypeMethod = !descriptor.isConstructorMethod;
174178

175179
descriptor.args = funcDescriptor.args.map(function(arg) {
180+
var manualArgs = functionDescriptor.args ? functionDescriptor.args[arg.name] || {} : {};
181+
182+
function isSelf(arg) {
183+
return file.jsClassName === typeMap[arg.type].js;
184+
}
185+
176186
if (typeMap[arg.type]) {
177187
return {
178188
name: arg.name,
179189
cType: arg.type,
180190
cppClassName: typeMap[arg.type].cpp,
181191
jsClassName: typeMap[arg.type].js,
182-
comment: arg.comment
192+
comment: arg.comment,
193+
isReturn: arg.name === "out" || arg.name.slice(-4) === "_out",
194+
isSelf: isSelf(arg)
183195
};
184196
}
185197

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* This code is auto-generated; unless you know what you're doing, do not modify!
3+
**/
4+
5+
// Used to detect for Cygwin
6+
var os = require('os');
7+
8+
// Required for Windows/Cygwin support
9+
var root = [__dirname, '/vendor/libgit2/build/shared'].join(''),
10+
path = process.env.PATH;
11+
12+
if (~os.type().indexOf('CYGWIN') && !~path.indexOf(root)) {
13+
process.env.PATH = root + ':' + path;
14+
}
15+
16+
// Assign raw api to module
17+
var rawApi = require('./build/emscripten/nodegit');
18+
19+
// Set the exports prototype to the raw API.
20+
exports.__proto__ = rawApi;
21+
22+
// Import extensions
23+
//require('./lib/commit.js');
24+
//require('./lib/blob.js');
25+
//require('./lib/object.js');
26+
//require('./lib/signature.js');
27+
//require('./lib/odb.js');
28+
//require('./lib/oid.js');
29+
//require('./lib/index.js');
30+
//require('./lib/repository.js');
31+
//require('./lib/reference.js');
32+
//require('./lib/revwalk.js');
33+
//require('./lib/tree.js');
34+
35+
// Set version
36+
exports.version = require('./package').version;
37+
38+
// Initialize threads
39+
//exports.Threads.init();
40+
41+
var glob = typeof window !== "undefined" ? window : global;
42+
43+
glob.nodegit = exports;

build/codegen/templates/em.class.js.ejs

Lines changed: 93 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@
33
**/
44

55
// Emscripten build.
6-
var Module = require("../libgit2.min");
6+
require("../libgit2.min");
77

8+
<% if (typeof ctor.dependencies != 'undefined' && ctor.dependencies.length) { %>
89
// NodeGit internal constructors.
9-
<% if (typeof ctor.dependencies != 'undefined') { -%>
10-
<% for (d in ctor.dependencies) { -%>
11-
var <%- typeMap['git_' +ctor.dependencies[d].slice(11, -2)].js %> = require('./<%- ctor.dependencies[d].slice(11, -2) %>');
12-
<% } -%>
13-
<% } -%>
10+
<% ctor.dependencies.shift(); %><% for (d in ctor.dependencies) { %>var <%- typeMap['git_' +ctor.dependencies[d].slice(11, -2)].js %> = require('./<%- ctor.dependencies[d].slice(11, -2) %>');
11+
<% } %>
12+
<% } %>
1413

1514
/**
1615
* Represents a <%- ctor.jsClassName %>.
@@ -19,6 +18,94 @@ var <%- ctor.jsClassName %> = {};
1918
<% } else { %>
2019
function <%- ctor.jsClassName %>() {
2120
21+
}<% } %>
22+
23+
<%
24+
// List of unavailable words.
25+
var reservedWords = [
26+
"in", "implements", "interface", "let", "package", "private", "protected",
27+
"public", "static", "yield", "class", "enum", "export", "extends",
28+
"import", "super", "abstract", "boolean", "byte", "char", "class", "const",
29+
"debugger", "double", "enum", "export", "extends", "final", "float",
30+
"goto", "implements", "import", "int", "interface", "long", "native",
31+
"package", "private", "protected", "public", "short", "static", "super",
32+
"synchronized", "throws", "transient", "volatile"
33+
];
34+
35+
36+
function args(descriptor, addCallback) {
37+
var isAsync = descriptor.isAsync;
38+
39+
var args = descriptor.args
40+
.filter(function(arg) {
41+
return !arg.isReturn && !arg.isSelf && arg.name;
42+
})
43+
44+
.map(function(arg) {
45+
if (reservedWords.indexOf(arg.name) > -1) {
46+
return arg.name + "_safe";
47+
}
48+
49+
return arg.name;
50+
});
51+
52+
if (isAsync && addCallback) {
53+
args.push("callback");
54+
}
55+
56+
return args;
2257
}
58+
%>
59+
60+
<% if (ctor.cType != null) { %>
61+
<% ctor.functions.forEach(function(descriptor) { %>
62+
<% if (!descriptor.isConstructorMethod) { %>
63+
<%- ctor.jsClassName %>.prototype.<%- descriptor.jsFunctionName %> = function(<%- args(descriptor, true) %>) {
64+
<% } else { %>
65+
<%- ctor.jsClassName %>.<%- descriptor.jsFunctionName %> = function(<%- args(descriptor, true) %>) {
66+
<% } %>
67+
68+
<% if (descriptor.args[1] && descriptor.args[1].name === "path") { %>
69+
// Always resolve the path.
70+
path = require("path").resolve(path);
71+
72+
var root = path.split("/")[1];
73+
74+
try {
75+
global.Module.FS.mkdir("/" + root);
76+
global.Module.FS.mount(global.Module.NODEFS, { root: "/" + root }, "/" + root);
77+
} catch(ex) {}
78+
<% } %>
79+
80+
<% if (descriptor.args && descriptor.args[0].isReturn) { %>
81+
<% if (descriptor.isConstructorMethod) { %>
82+
var <%- descriptor.args[0].name %> = new <%- ctor.jsClassName %>();
83+
<% } else { %>
84+
var <%- descriptor.args[0].name %> = this;
85+
<% } %>
86+
<% } %>
87+
88+
var err = global.Module.ccall("<%- descriptor.cFunctionName %>", "<%- descriptor.return.cType %>", [
89+
<% descriptor.args.forEach(function(arg) { %>
90+
"<%- (arg.jsClassName || "").toLowerCase() %>",
91+
<% }); %>
92+
], [
93+
<% if (descriptor.args && descriptor.args[0].isReturn) { %>
94+
<%- descriptor.args[0].name %>,
95+
<% } %>
96+
<%- args(descriptor) %>
97+
]);
98+
99+
<% if (descriptor.isAsync) { %>
100+
callback(err <%- descriptor.args[0].name ? ", " + descriptor.args[0].name : "" %>);
101+
<% } %>
102+
103+
};<% }); %>
104+
<% } else { %>
105+
<% ctor.functions.forEach(function(descriptor) { %>
106+
<%- ctor.jsClassName %>.<%- descriptor.jsFunctionName %> = function(<%- args(descriptor, true) %>) {
107+
108+
};
109+
<% }); %>
23110
<% } %>
24111
module.exports = <%- ctor.jsClassName %>;

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
<title>Index</title>
77
</head>
88
<body>
9-
<script src="test.js"></script>
9+
<script src="dist/nodegit.js"></script>
1010
</body>
1111
</html>

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
}
2323
],
2424
"main": "index.js",
25+
"browser": "browser.js",
2526
"repository": {
2627
"type": "git",
2728
"url": "git://github.com/tbranyen/nodegit.git"
@@ -53,6 +54,7 @@
5354
"lint": "jshint src",
5455
"install": "npm run codegen && node install.js",
5556
"test": "cd test && nodeunit nodegit.js",
56-
"codegen": "node build/codegen/t.js && node build/codegen/generate.js"
57+
"codegen": "node build/codegen/t.js && node build/codegen/generate.js",
58+
"browserify": "browserify . --noparse=build/libgit2.min.js > dist/nodegit.js"
5759
}
5860
}

0 commit comments

Comments
 (0)