(ctx context.Context, fn func([]blob.Ref, BytesPart) error, path []blob.Ref)
| 220 | } |
| 221 | |
| 222 | func (fr *FileReader) foreachChunk(ctx context.Context, fn func([]blob.Ref, BytesPart) error, path []blob.Ref) error { |
| 223 | path = append(path, fr.ss.BlobRef) |
| 224 | for _, bp := range fr.ss.Parts { |
| 225 | if bp.BytesRef.Valid() && bp.BlobRef.Valid() { |
| 226 | return fmt.Errorf("part in %v illegally contained both a blobRef and bytesRef", fr.ss.BlobRef) |
| 227 | } |
| 228 | if bp.BytesRef.Valid() { |
| 229 | ss, err := fr.getSuperset(ctx, bp.BytesRef) |
| 230 | if err != nil { |
| 231 | return err |
| 232 | } |
| 233 | subfr, err := ss.NewFileReader(fr.fetcher) |
| 234 | if err != nil { |
| 235 | return err |
| 236 | } |
| 237 | subfr.parent = fr |
| 238 | if err := subfr.foreachChunk(ctx, fn, path); err != nil { |
| 239 | return err |
| 240 | } |
| 241 | } else { |
| 242 | if err := fn(path, *bp); err != nil { |
| 243 | return err |
| 244 | } |
| 245 | } |
| 246 | } |
| 247 | return nil |
| 248 | } |
| 249 | |
| 250 | func (fr *FileReader) rootReader() *FileReader { |
| 251 | if fr.parent != nil { |
no test coverage detected