@@ -26,13 +26,13 @@ import (
2626)
2727
2828// 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 ) {
3030 includeGlobPatterns := make ([]glob.Glob , 0 , len (s3Lister .Includes ))
3131
3232 for _ , includePattern := range s3Lister .Includes {
3333 globExpression , err := glob .Compile (includePattern , '/' )
3434 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 )
3636 }
3737 includeGlobPatterns = append (includeGlobPatterns , globExpression )
3838 }
@@ -41,20 +41,22 @@ func s3IteratorFromLister(s3Lister schema.S3Lister, fn func(string, *s3.Object)
4141 for _ , excludePattern := range s3Lister .Excludes {
4242 globExpression , err := glob .Compile (excludePattern , '/' )
4343 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 )
4545 }
4646 excludeGlobPatterns = append (excludeGlobPatterns , globExpression )
4747 }
4848
49+ var numResults int64
50+
4951 for _ , s3Path := range s3Lister .S3Paths {
5052 bucket , key , err := aws .SplitS3Path (s3Path )
5153 if err != nil {
52- return err
54+ return 0 , err
5355 }
5456
5557 awsClientForBucket , err := aws .NewFromClientS3Path (s3Path , config .AWS )
5658 if err != nil {
57- return err
59+ return 0 , err
5860 }
5961
6062 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)
7981 }
8082
8183 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
8390 }
8491
8592 return true , nil
8693 })
8794 if err != nil {
88- return err
95+ return 0 , err
96+ }
97+
98+ if s3Lister .MaxResults != nil && numResults >= * s3Lister .MaxResults {
99+ return numResults , nil
89100 }
90101 }
91102
92- return nil
103+ return numResults , nil
93104}
0 commit comments