@@ -26,13 +26,13 @@ import (
26
26
)
27
27
28
28
// Takes in a function(shouldSkip, bucketName, s3.Object)
29
- func s3IteratorFromLister (s3Lister schema.S3Lister , fn func (string , * s3.Object ) (bool , error )) error {
29
+ func s3IteratorFromLister (s3Lister schema.S3Lister , fn func (string , * s3.Object ) (bool , error )) ( int64 , error ) {
30
30
includeGlobPatterns := make ([]glob.Glob , 0 , len (s3Lister .Includes ))
31
31
32
32
for _ , includePattern := range s3Lister .Includes {
33
33
globExpression , err := glob .Compile (includePattern , '/' )
34
34
if err != nil {
35
- return errors .Wrap (err , "failed to interpret glob pattern" , includePattern )
35
+ return 0 , errors .Wrap (err , "failed to interpret glob pattern" , includePattern )
36
36
}
37
37
includeGlobPatterns = append (includeGlobPatterns , globExpression )
38
38
}
@@ -41,20 +41,22 @@ func s3IteratorFromLister(s3Lister schema.S3Lister, fn func(string, *s3.Object)
41
41
for _ , excludePattern := range s3Lister .Excludes {
42
42
globExpression , err := glob .Compile (excludePattern , '/' )
43
43
if err != nil {
44
- return errors .Wrap (err , "failed to interpret glob pattern" , excludePattern )
44
+ return 0 , errors .Wrap (err , "failed to interpret glob pattern" , excludePattern )
45
45
}
46
46
excludeGlobPatterns = append (excludeGlobPatterns , globExpression )
47
47
}
48
48
49
+ var numResults int64
50
+
49
51
for _ , s3Path := range s3Lister .S3Paths {
50
52
bucket , key , err := aws .SplitS3Path (s3Path )
51
53
if err != nil {
52
- return err
54
+ return 0 , err
53
55
}
54
56
55
57
awsClientForBucket , err := aws .NewFromClientS3Path (s3Path , config .AWS )
56
58
if err != nil {
57
- return err
59
+ return 0 , err
58
60
}
59
61
60
62
err = awsClientForBucket .S3Iterator (bucket , key , false , nil , nil , func (s3Obj * s3.Object ) (bool , error ) {
@@ -79,15 +81,24 @@ func s3IteratorFromLister(s3Lister schema.S3Lister, fn func(string, *s3.Object)
79
81
}
80
82
81
83
if ! shouldSkip {
82
- return fn (bucket , s3Obj )
84
+ shouldContinue , err := fn (bucket , s3Obj )
85
+ numResults ++
86
+ if s3Lister .MaxResults != nil && numResults >= * s3Lister .MaxResults {
87
+ shouldContinue = false
88
+ }
89
+ return shouldContinue , err
83
90
}
84
91
85
92
return true , nil
86
93
})
87
94
if err != nil {
88
- return err
95
+ return 0 , err
96
+ }
97
+
98
+ if s3Lister .MaxResults != nil && numResults >= * s3Lister .MaxResults {
99
+ return numResults , nil
89
100
}
90
101
}
91
102
92
- return nil
103
+ return numResults , nil
93
104
}
0 commit comments