Skip to content

Commit f59963d

Browse files
committed
Save state.
1 parent 67635e1 commit f59963d

File tree

11 files changed

+263
-37
lines changed

11 files changed

+263
-37
lines changed

binding.gyp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
# Maintained.
1212
"src/base.cc",
1313
"src/wrapper.cc",
14-
"src/time.cc",
1514
"src/functions/copy.cc",
1615

1716
# Generated files.
@@ -63,10 +62,12 @@
6362
"src/submodule.cc",
6463
"src/tag.cc",
6564
"src/threads.cc",
65+
"src/time.cc",
6666
"src/trace.cc",
6767
"src/transport.cc",
6868
"src/tree.cc",
69-
"src/types.cc",
69+
#"src/tree_entry.cc",
70+
#"src/types.cc",
7071
"src/version.cc",
7172
],
7273

build/codegen/descriptor.json

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,84 @@
435435
},
436436

437437
"tree": {
438-
"ignore": false
438+
"ignore": false,
439+
440+
"functions": {
441+
"git_tree_entrycount": {
442+
"ignore": false,
443+
"args": [{ "isSelf": true }]
444+
},
445+
446+
"git_tree_lookup": {
447+
"ignore": false,
448+
449+
"args": [{}, { "isSelf": true }]
450+
},
451+
452+
"git_tree_entry_byindex": {
453+
"ignore": false,
454+
"args": [{ "isSelf": true }]
455+
}
456+
457+
"git_tree_entry_bypath": {
458+
"ignore": false
459+
}
460+
}
461+
},
462+
463+
"treebuilder": {
464+
"ignore": false,
465+
"cType": "git_treebuilder",
466+
467+
"dependencies": [
468+
"tree.h"
469+
],
470+
471+
"fields": [
472+
{
473+
"name": "entries",
474+
"cType": "git_vector"
475+
},
476+
{
477+
"name": "entrycount",
478+
"cType": "size_t"
479+
}
480+
]
481+
},
482+
483+
"tree_entry": {
484+
"ignore": true,
485+
486+
"structType": "git_tree_entry",
487+
"cType": null,
488+
489+
"dependencies": [
490+
"../include/tree.h",
491+
"../include/types.h"
492+
],
493+
494+
"fields": [
495+
{
496+
"name": "removed",
497+
"cType": "uint16_t"
498+
},
499+
{
500+
"name": "attr",
501+
"cType": "uint16_t"
502+
},
503+
{
504+
"name": "oid",
505+
"cType": "git_oid"
506+
},
507+
{
508+
"name": "filename_len",
509+
"cType": "size_t"
510+
},
511+
{
512+
"name": "filename",
513+
"cType": "char *"
514+
}
515+
]
439516
},
440517

441518
"types": {

build/codegen/setup.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ typeMap.__proto__ = {
2020
"const git_index_name_entry *": {
2121
cpp: "IndexNameEntry", js: "IndexNameEntry" },
2222
"git_time": { cpp: "GitTime", js: "Time", },
23+
"git_vector": { cpp: "Array", js: "Array", },
2324

2425
// unsure
2526
"uint16_t": { cpp: "Integer", js: "Number" },
@@ -164,6 +165,10 @@ Object.keys(descriptor).forEach(function(fileName, index) {
164165
descriptor.cFunctionName = functionName;
165166
descriptor.ignore = functionDescriptor === ident;
166167

168+
if (typeof functionDescriptor.ignore === "boolean") {
169+
descriptor.ignore = functionDescriptor.ignore;
170+
}
171+
167172
var trimmedName = functionName.slice(cType.length + 1);
168173

169174
if (trimmedName === "new") {

build/codegen/types.json

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,8 +1314,8 @@
13141314
"js": "free"
13151315
},
13161316
"git_reference__alloc": {
1317-
"js": "gitReference_Alloc",
1318-
"cpp": "GitReference_Alloc"
1317+
"cpp": "ReferenceAlloc",
1318+
"js": "referenceAlloc"
13191319
},
13201320
"git_refdb *": {
13211321
"cpp": "GitRefdb",
@@ -2440,12 +2440,12 @@
24402440
"js": "entryDup"
24412441
},
24422442
"const git_tree_entry *": {
2443-
"js": "GitTreeEntry",
2444-
"cpp": "TreeEntry"
2443+
"cpp": "GitTreeEntry",
2444+
"js": "TreeEntry"
24452445
},
24462446
"git_tree_entry *": {
2447-
"js": "TreeEntry",
2448-
"cpp": "GitTreeEntry"
2447+
"cpp": "GitTreeEntry",
2448+
"js": "TreeEntry"
24492449
},
24502450
"git_tree_entry_free": {
24512451
"cpp": "EntryFree",
@@ -2516,16 +2516,16 @@
25162516
"js": "entryBypath"
25172517
},
25182518
"git_tree_entry **": {
2519-
"js": "TreeEntry",
2520-
"cpp": "GitTreeEntry"
2519+
"cpp": "GitTreeEntry",
2520+
"js": "TreeEntry"
25212521
},
25222522
"git_treebuilder_create": {
25232523
"cpp": "UilderCreate",
25242524
"js": "uilderCreate"
25252525
},
25262526
"git_treebuilder **": {
2527-
"js": "TreeBuilder",
2528-
"cpp": "GitTreeBuilder"
2527+
"cpp": "GitTreebuilder",
2528+
"js": "Treebuilder"
25292529
},
25302530
"git_tree_walk": {
25312531
"cpp": "Walk",
@@ -2556,8 +2556,8 @@
25562556
"js": "uilderClear"
25572557
},
25582558
"git_treebuilder *": {
2559-
"js": "TreeBuilder",
2560-
"cpp": "GitTreeBuilder"
2559+
"cpp": "GitTreebuilder",
2560+
"js": "Treebuilder"
25612561
},
25622562
"git_treebuilder_entrycount": {
25632563
"cpp": "UilderEntrycount",
@@ -2576,8 +2576,8 @@
25762576
"js": "uilderInsert"
25772577
},
25782578
"const git_tree_entry **": {
2579-
"js": "TreeEntry",
2580-
"cpp": "GitTreeEntry"
2579+
"cpp": "GitTreeEntry",
2580+
"js": "TreeEntry"
25812581
},
25822582
"git_treebuilder_remove": {
25832583
"cpp": "UilderRemove",
@@ -8931,5 +8931,41 @@
89318931
"const git_time *": {
89328932
"cpp": "GitTime",
89338933
"js": "Time"
8934+
},
8935+
"git_treebuilder": {
8936+
"cpp": "GitTreebuilder",
8937+
"js": "Treebuilder"
8938+
},
8939+
"const git_treebuilder **": {
8940+
"cpp": "GitTreebuilder",
8941+
"js": "Treebuilder"
8942+
},
8943+
"const git_treebuilder *": {
8944+
"cpp": "GitTreebuilder",
8945+
"js": "Treebuilder"
8946+
},
8947+
"git_tree_entry": {
8948+
"cpp": "GitTreeEntry",
8949+
"js": "TreeEntry"
8950+
},
8951+
"git_reference__alloc *": {
8952+
"cpp": "ReferenceAlloc",
8953+
"js": "referenceAlloc"
8954+
},
8955+
"const git_reference__alloc *": {
8956+
"cpp": "ReferenceAlloc",
8957+
"js": "referenceAlloc"
8958+
},
8959+
"git_reference__alloc_symbolic": {
8960+
"cpp": "ReferenceAllocSymbolic",
8961+
"js": "referenceAllocSymbolic"
8962+
},
8963+
"git_reference__alloc_symbolic *": {
8964+
"cpp": "ReferenceAllocSymbolic",
8965+
"js": "referenceAllocSymbolic"
8966+
},
8967+
"const git_reference__alloc_symbolic *": {
8968+
"cpp": "ReferenceAllocSymbolic",
8969+
"js": "referenceAllocSymbolic"
89348970
}
89358971
}

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ require('./lib/index.js');
2323
require('./lib/repository.js');
2424
require('./lib/reference.js');
2525
require('./lib/revwalk.js');
26-
//require('./lib/tree.js');
26+
require('./lib/tree.js');
2727

2828
// Set version
2929
exports.version = require('./package').version;

lib/commit.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var git = require('../');
22
var Commit = git.Commit;
33
var Oid = git.Oid;
44
var events = require('events');
5+
var Tree = require("./tree");
56

67
// Backwards compatibility.
78
Object.defineProperties(Commit.prototype, {

lib/repository.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Object.defineProperty(git, "Repo", {
1818
var oldGetReference = Reference.prototype.lookup,
1919
oldGetCommit = Commit.prototype.lookup,
2020
oldBlob = Blob.prototype.lookup,
21-
oldGetTree = Repo.prototype.getTree,
21+
oldGetTree = Tree.prototype.lookup,
2222
oldGetTag = Repo.prototype.getTag,
2323
oldCreateRevwalk = Revwalk.prototype.createRevwalk,
2424
oldCreateCommit = Repo.prototype.createCommit,

lib/tree.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
1-
var git = require('../'),
2-
Tree = git.Tree,
3-
events = require('events'),
4-
path = require('path');
1+
var git = require('../');
2+
var Tree = git.Tree;
3+
var TreeEntry = require('./tree_entry');
4+
var events = require('events');
5+
var path = require('path');
56

6-
var oldEntryByIndex = Tree.prototype.entryByIndex,
7+
var oldEntryByIndex = Tree.prototype.entryByindex,
78
oldEntryByName = Tree.prototype.entryByName,
89
oldGetEntry = Tree.prototype.getEntry;
910

11+
// Backwards compatibility.
12+
Object.defineProperties(Tree.prototype, {
13+
"size": {
14+
value: Tree.prototype.entrycount,
15+
enumerable: false
16+
}
17+
});
18+
1019
/**
1120
* Diff two trees
1221
* @param {Tree} tree to diff against
@@ -101,6 +110,7 @@ Tree.prototype.walk = function(blobsOnly) {
101110
if (error) return errors.push(error);
102111

103112
tree.entries().forEach(function (entry) {
113+
entry.__proto__ = TreeEntry.prototype;
104114
if (!blobsOnly || entry.isFile()) {
105115
event.emit('entry', entry);
106116
entries.push(entry);

lib/tree_entry.js

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
var git = require('../'),
2+
TreeEntry = function() {},
3+
path = require('path');
4+
5+
/**
6+
* Refer to vendor/libgit2/include/git2/types.h for filemode definitions.
7+
*
8+
* @readonly
9+
* @enum {Integer}
10+
*/
11+
TreeEntry.FileMode = {
12+
/** 0000000 */ New: 0,
13+
/** 0040000 */ Tree: 16384,
14+
/** 0100644 */ Blob: 33188,
15+
/** 0100755 */ Executable: 33261,
16+
/** 0120000 */ Link: 40960,
17+
/** 0160000 */ Commit: 57344
18+
};
19+
20+
/**
21+
* Is this TreeEntry a blob? (i.e., a file)
22+
* @return {Boolean}
23+
*/
24+
TreeEntry.prototype.isFile = function() {
25+
return this.filemode === TreeEntry.FileMode.Blob ||
26+
this.filemode === TreeEntry.FileMode.Executable;
27+
};
28+
29+
/**
30+
* Is this TreeEntry a tree? (i.e., a directory)
31+
* @return {Boolean}
32+
*/
33+
TreeEntry.prototype.isTree = function() {
34+
return this.filemode === TreeEntry.FileMode.Tree;
35+
};
36+
37+
/**
38+
* Is this TreeEntry a directory? Alias for `isTree`
39+
* @return {Boolean}
40+
*/
41+
TreeEntry.prototype.isDirectory = TreeEntry.prototype.isTree;
42+
43+
/**
44+
* Is this TreeEntry a blob? Alias for `isFile`
45+
* @return {Boolean}
46+
*/
47+
TreeEntry.prototype.isBlob = TreeEntry.prototype.isFile;
48+
49+
/**
50+
* Retrieve the SHA for this TreeEntry.
51+
* @return {String}
52+
*/
53+
TreeEntry.prototype.sha = function() {
54+
return this.oid().sha();
55+
};
56+
57+
/**
58+
* Retrieve the tree for this entry. Make sure to call `isTree` first!
59+
* @return {Tree}
60+
*/
61+
TreeEntry.prototype.getTree = function(callback) {
62+
var self = this;
63+
this.parent.repo.getTree(this.oid(), function(error, tree) {
64+
if (error) return callback(error);
65+
66+
tree.entry = self;
67+
callback(null, tree);
68+
});
69+
};
70+
71+
/**
72+
* Retrieve the tree for this entry. Make sure to call `isTree` first!
73+
* @return {Blob}
74+
*/
75+
TreeEntry.prototype.getBlob = function(callback) {
76+
this.parent.repo.getBlob(this.oid(), callback);
77+
};
78+
79+
/**
80+
* Returns the path for this entry.
81+
* @return {String}
82+
*/
83+
TreeEntry.prototype.path = function(callback) {
84+
return path.join(this.parent.path(), this.name());
85+
};
86+
87+
/**
88+
* Alias for `path`
89+
*/
90+
TreeEntry.prototype.toString = function() {
91+
return this.path();
92+
};
93+
94+
module.exports = TreeEntry;

0 commit comments

Comments
 (0)