MCPcopy Index your code
hub / github.com/perkeep/perkeep / staticSet

Function staticSet

pkg/schema/dirreader.go:103–142  ·  view source on GitHub ↗
(ctx context.Context, staticSetBlobref blob.Ref, fetcher blob.Fetcher)

Source from the content-addressed store, hash-verified

101}
102
103func staticSet(ctx context.Context, staticSetBlobref blob.Ref, fetcher blob.Fetcher) ([]blob.Ref, error) {
104 rsc, _, err := fetcher.Fetch(ctx, staticSetBlobref)
105 if err != nil {
106 return nil, fmt.Errorf("schema/dirreader: fetching schema blob %s: %v", staticSetBlobref, err)
107 }
108 defer rsc.Close()
109 ss, err := parseSuperset(rsc)
110 if err != nil {
111 return nil, fmt.Errorf("schema/dirreader: decoding schema blob %s: %v", staticSetBlobref, err)
112 }
113 if ss.Type != "static-set" {
114 return nil, fmt.Errorf("schema/dirreader: expected \"static-set\" schema blob for %s, got %q", staticSetBlobref, ss.Type)
115 }
116 var members []blob.Ref
117 if len(ss.Members) > 0 {
118 // We have fileRefs or dirRefs in ss.Members, so we are either in the static-set
119 // of a small directory, or one of the "leaf" subsets of a large directory spread.
120 for _, member := range ss.Members {
121 if !member.Valid() {
122 return nil, fmt.Errorf("schema/dirreader: invalid (static-set member) blobref referred by \"static-set\" schema blob %v", staticSetBlobref)
123 }
124 members = append(members, member)
125 }
126 return members, nil
127 }
128 // We are either at the top static-set of a large directory, or in a "non-leaf"
129 // subset of a large directory.
130 for _, toMerge := range ss.MergeSets {
131 if !toMerge.Valid() {
132 return nil, fmt.Errorf("schema/dirreader: invalid (static-set subset) blobref referred by \"static-set\" schema blob %v", staticSetBlobref)
133 }
134 // TODO(mpl): do it concurrently
135 subset, err := staticSet(ctx, toMerge, fetcher)
136 if err != nil {
137 return nil, fmt.Errorf("schema/dirreader: could not get members of %q, subset of %v: %v", toMerge, staticSetBlobref, err)
138 }
139 members = append(members, subset...)
140 }
141 return members, nil
142}
143
144// Readdir implements the Directory interface.
145func (dr *DirReader) Readdir(ctx context.Context, n int) (entries []DirectoryEntry, err error) {

Callers 1

StaticSetMethod · 0.85

Calls 4

parseSupersetFunction · 0.85
FetchMethod · 0.65
CloseMethod · 0.65
ValidMethod · 0.45

Tested by

no test coverage detected