@@ -25,52 +25,50 @@ var _Tree = function( obj, tree ) {
2525 enumerable : true
2626 } ) ;
2727
28- // Synchronous walk
29- self . walk = function ( callback ) {
30- if ( ! callback ) { return ; }
31-
28+ self . walk = function ( repo ) {
3229 var entry
33- , i ;
34-
35- for ( i = 0 , len = self . length ; i < len ; i ++ ) {
36- entry = git . entry ( self . repo ) ;
37-
38- self . tree . entryByIndex ( entry . entry , i ) ;
39-
40- if ( callback . apply ( entry , [ i , entry ] ) === false ) {
41- break ;
42- }
30+ , i
31+ , len = self . length
32+ , repo = repo || self . repo
33+ , event = new events . EventEmitter ( ) ;
34+
35+ function next ( i ) {
36+ var dir ;
37+ var tree ;
38+
39+ entry = git . entry ( repo ) ;
40+
41+ self . tree . entryByIndex ( entry . entry , i , function ( ) {
42+ if ( entry . isFile ( ) ) {
43+ event . emit ( 'entry' , i , entry ) ;
44+ }
45+ else {
46+ dir = entry . name ;
47+ tree = entry . tree ( ) ;
48+
49+ ! tree . error && tree . walk ( repo ) . on ( 'entry' , function ( i , entry ) {
50+ entry . dir += dir + '/' ;
51+ event . emit ( 'entry' , i , entry ) ;
52+ } ) ;
53+ }
54+
55+ i < len - 1 && next ( i = i + 1 ) ;
56+ } ) ;
4357 }
44- } ;
45-
46- //self.walk = function( callback ) {
47- // if( !callback ) { return; }
4858
49- // var entry
50- // , i
51- // , entries
52- // , event = new events.EventEmitter();
59+ next ( 0 ) ;
5360
54- // for( i=0, len=self.length; i<len; i++ ) {
55- // entry = git.entry();
56-
57- // self.tree.entryByIndex( entry.entry, i );
58- // event.emit( 'entry', [ err, i, entry ] );
59-
60- // entries.push( entry );
61- // }
62-
63- // event.emit( 'end', entries );
61+ return event ;
62+ } ;
6463
65- // return event;
66- //};
64+ self . entry = function ( name , callback ) {
65+ if ( ! callback ) { return ; }
6766
68- self . entry = function ( name ) {
6967 var entry = git . entry ( self . repo ) ;
7068
71- self . tree . entryByName ( entry . entry , name ) ;
72-
73- return entry ;
69+ self . tree . entryByName ( entry . entry , name , function ( valid ) {
70+ callback ( valid ? entry : undefined ) ;
71+ } ) ;
7472 } ;
7573
7674 return self ;
0 commit comments