@@ -99,16 +99,16 @@ func (t *Tree) listEntriesRecursive(ctx context.Context, extraArgs TrustedCmdArg
99
99
}
100
100
101
101
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 {
108
103
t .entriesRecursive = append (t .entriesRecursive , entry )
109
104
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
112
112
}
113
113
114
114
// 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
123
123
124
124
// iterateEntriesRecursive returns iterate entries of current tree recursively including all subtrees
125
125
// 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 {
131
127
reader , writer := io .Pipe ()
132
128
done := make (chan error )
133
129
@@ -151,9 +147,12 @@ func (t *Tree) iterateEntriesRecursive(f func(entry *TreeEntry) error, extraArgs
151
147
if err := scanner .Err (); err != nil {
152
148
return err
153
149
}
150
+
154
151
data := scanner .Bytes ()
155
152
if err := iterateTreeEntries (data , t , func (entry * TreeEntry ) error {
156
153
select {
154
+ case <- ctx .Done ():
155
+ return ctx .Err ()
157
156
case runErr := <- done :
158
157
return runErr
159
158
default :
@@ -163,10 +162,9 @@ func (t *Tree) iterateEntriesRecursive(f func(entry *TreeEntry) error, extraArgs
163
162
return err
164
163
}
165
164
}
166
- t .entriesRecursiveParsed = true
167
165
return nil
168
166
}
169
167
170
168
func (t * Tree ) IterateEntriesWithSize (f func (* TreeEntry ) error ) error {
171
- return t .iterateEntriesRecursive (f , TrustedCmdArgs {"--long" })
169
+ return t .iterateEntriesRecursive (context . Background (), f , TrustedCmdArgs {"--long" })
172
170
}
0 commit comments