/
decomposed_directory_walker.go
44 lines (36 loc) · 1.2 KB
/
decomposed_directory_walker.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package cas
import (
"context"
"fmt"
remoteexecution "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2"
"github.com/buildbarn/bb-storage/pkg/digest"
)
type decomposedDirectoryWalker struct {
fetcher DirectoryFetcher
digest digest.Digest
}
// NewDecomposedDirectoryWalker creates a DirectoryWalker that assumes
// that all Directory messages are stored as separate objects in the
// Content Addressable Storage (CAS). This is the case for input roots
// of build actions.
func NewDecomposedDirectoryWalker(fetcher DirectoryFetcher, digest digest.Digest) DirectoryWalker {
return &decomposedDirectoryWalker{
fetcher: fetcher,
digest: digest,
}
}
func (dw *decomposedDirectoryWalker) GetDirectory(ctx context.Context) (*remoteexecution.Directory, error) {
return dw.fetcher.GetDirectory(ctx, dw.digest)
}
func (dw *decomposedDirectoryWalker) GetChild(digest digest.Digest) DirectoryWalker {
return &decomposedDirectoryWalker{
fetcher: dw.fetcher,
digest: digest,
}
}
func (dw *decomposedDirectoryWalker) GetDescription() string {
return fmt.Sprintf("Directory %#v", dw.digest.String())
}
func (dw *decomposedDirectoryWalker) GetContainingDigest() digest.Digest {
return dw.digest
}