func killBucket(b *s3.Bucket) { var err error for attempt := attempts.Start(); attempt.Next(); { err = b.DelBucket() if err == nil { return } if _, ok := err.(*net.DNSError); ok { return } e, ok := err.(*s3.Error) if ok && e.Code == "NoSuchBucket" { return } if ok && e.Code == "BucketNotEmpty" { // Errors are ignored here. Just retry. resp, err := b.List("", "", "", 1000) if err == nil { for _, key := range resp.Contents { _ = b.Del(key.Key) } } multis, _, _ := b.ListMulti("", "") for _, m := range multis { _ = m.Abort() } } } message := "cannot delete test bucket" if err != nil { message += ": " + err.Error() } panic(message) }
func listBucketFiles(bucket *s3.Bucket) <-chan *Item { c := make(chan *Item) go func() { marker := "" for { resp, err := bucket.List(options.Get.Prefix, "", marker, 1000) if err != nil { log.Printf("Could not list items in bucket: %s", err) } for _, item := range resp.Contents { c <- &Item{ Prefix: options.Get.Prefix, Path: item.Key, FileInfo: nil, } marker = item.Key } if !resp.IsTruncated { break } } close(c) }() return c }