@@ -5,10 +5,14 @@ var promisify = require("promisify-node");
55var readDir = promisify ( fs . readdir ) ;
66var local = path . join . bind ( path , __dirname ) ;
77
8+ var leakTest = require ( "../utils/leak_test" ) ;
9+
810describe ( "TreeBuilder" , function ( ) {
911
1012 var Git = require ( "../../" ) ;
1113 var reposPath = local ( "../repos/workdir" ) ;
14+ var oid = "111dd657329797f6165f52f5085f61ac976dcf04" ;
15+
1216 //setup test repo each test
1317 beforeEach ( function ( ) {
1418 var test = this ;
@@ -76,4 +80,19 @@ describe("TreeBuilder", function(){
7680 return Git . Tree . lookup ( test . repo , newTreeEntry . oid ( ) ) ;
7781 } ) ;
7882 } ) ;
83+
84+ it ( "does not leak inserts" , function ( ) {
85+ var test = this ;
86+
87+ // The underlying C++ git_tree_entry is owned by the treebuilder that
88+ // creates it. But since git_tree_entry is duplicable the generator will
89+ // duplicate it and mark it as self freeing.
90+ // Validate this with the leakTest.
91+ return leakTest ( Git . TreeEntry , function ( ) {
92+ return Git . Treebuilder . create ( test . repo , null )
93+ . then ( function ( builder ) {
94+ return builder . insert ( "test" , oid , Git . TreeEntry . FILEMODE . BLOB ) ;
95+ } ) ;
96+ } ) ;
97+ } ) ;
7998} ) ;
0 commit comments