MCPcopy
hub / github.com/perkeep/perkeep / getSuperset

Method getSuperset

pkg/schema/filereader.go:278–309  ·  view source on GitHub ↗
(ctx context.Context, br blob.Ref)

Source from the content-addressed store, hash-verified

276}
277
278func (fr *FileReader) getSuperset(ctx context.Context, br blob.Ref) (*superset, error) {
279 if root := fr.rootReader(); root != fr {
280 return root.getSuperset(ctx, br)
281 }
282 brStr := br.String()
283 ssi, err := fr.sfg.Do(brStr, func() (interface{}, error) {
284 fr.ssmmu.Lock()
285 ss, ok := fr.ssm[br]
286 fr.ssmmu.Unlock()
287 if ok {
288 return ss, nil
289 }
290 rc, _, err := fr.fetcher.Fetch(ctx, br)
291 if err != nil {
292 return nil, fmt.Errorf("schema/filereader: fetching file schema blob: %w", err)
293 }
294 defer rc.Close()
295 ss, err = parseSuperset(rc)
296 if err != nil {
297 return nil, err
298 }
299 ss.BlobRef = br
300 fr.ssmmu.Lock()
301 defer fr.ssmmu.Unlock()
302 fr.ssm[br] = ss
303 return ss, nil
304 })
305 if err != nil {
306 return nil, err
307 }
308 return ssi.(*superset), nil
309}
310
311var debug = env.IsDebug()
312

Callers 2

foreachChunkMethod · 0.95
readerForOffsetMethod · 0.95

Calls 7

rootReaderMethod · 0.95
parseSupersetFunction · 0.85
LockMethod · 0.80
UnlockMethod · 0.80
FetchMethod · 0.65
CloseMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected