@@ -99,16 +99,16 @@ func (t *Tree) listEntriesRecursive(ctx context.Context, extraArgs TrustedCmdArg
9999 }
100100
101101 t .entriesRecursive = make ([]* TreeEntry , 0 )
102- err := t .iterateEntriesRecursive (func (entry * TreeEntry ) error {
103- select {
104- case <- ctx .Done ():
105- return ctx .Err ()
106- default :
107- }
102+ if err := t .iterateEntriesRecursive (ctx , func (entry * TreeEntry ) error {
108103 t .entriesRecursive = append (t .entriesRecursive , entry )
109104 return nil
110- }, extraArgs )
111- return t .entriesRecursive , err
105+ }, extraArgs ); err != nil {
106+ t .entriesRecursive = nil
107+ return nil , err
108+ }
109+
110+ t .entriesRecursiveParsed = true
111+ return t .entriesRecursive , nil
112112}
113113
114114// ListEntriesRecursiveFast returns all entries of current tree recursively including all subtrees, no size
@@ -123,11 +123,7 @@ func (t *Tree) ListEntriesRecursiveWithSize(ctx context.Context) (Entries, error
123123
124124// iterateEntriesRecursive returns iterate entries of current tree recursively including all subtrees
125125// extraArgs could be "-l" to get the size, which is slower
126- func (t * Tree ) iterateEntriesRecursive (f func (entry * TreeEntry ) error , extraArgs TrustedCmdArgs ) error {
127- if t .entriesRecursiveParsed {
128- return nil
129- }
130-
126+ func (t * Tree ) iterateEntriesRecursive (ctx context.Context , f func (entry * TreeEntry ) error , extraArgs TrustedCmdArgs ) error {
131127 reader , writer := io .Pipe ()
132128 done := make (chan error )
133129
@@ -151,9 +147,12 @@ func (t *Tree) iterateEntriesRecursive(f func(entry *TreeEntry) error, extraArgs
151147 if err := scanner .Err (); err != nil {
152148 return err
153149 }
150+
154151 data := scanner .Bytes ()
155152 if err := iterateTreeEntries (data , t , func (entry * TreeEntry ) error {
156153 select {
154+ case <- ctx .Done ():
155+ return ctx .Err ()
157156 case runErr := <- done :
158157 return runErr
159158 default :
@@ -163,10 +162,9 @@ func (t *Tree) iterateEntriesRecursive(f func(entry *TreeEntry) error, extraArgs
163162 return err
164163 }
165164 }
166- t .entriesRecursiveParsed = true
167165 return nil
168166}
169167
170168func (t * Tree ) IterateEntriesWithSize (f func (* TreeEntry ) error ) error {
171- return t .iterateEntriesRecursive (f , TrustedCmdArgs {"--long" })
169+ return t .iterateEntriesRecursive (context . Background (), f , TrustedCmdArgs {"--long" })
172170}
0 commit comments