MCPcopy
hub / github.com/perkeep/perkeep / bytesHaveSchemaLink

Function bytesHaveSchemaLink

pkg/server/share.go:315–351  ·  view source on GitHub ↗

bytesHaveSchemaLink reports whether bb is a valid Perkeep schema blob and has target somewhere in a schema field used to represent a Merkle-tree-ish file or directory.

(br blob.Ref, bb []byte, target blob.Ref)

Source from the content-addressed store, hash-verified

313// blob and has target somewhere in a schema field used to represent a
314// Merkle-tree-ish file or directory.
315func bytesHaveSchemaLink(br blob.Ref, bb []byte, target blob.Ref) bool {
316 // Fast path for no:
317 if !bytes.Contains(bb, []byte(target.String())) {
318 return false
319 }
320 b, err := schema.BlobFromReader(br, bytes.NewReader(bb))
321 if err != nil {
322 return false
323 }
324 typ := b.Type()
325 switch typ {
326 case schema.TypeFile, schema.TypeBytes:
327 for _, bp := range b.ByteParts() {
328 if bp.BlobRef.Valid() {
329 if bp.BlobRef == target {
330 return true
331 }
332 }
333 if bp.BytesRef.Valid() {
334 if bp.BytesRef == target {
335 return true
336 }
337 }
338 }
339 case schema.TypeDirectory:
340 if d, ok := b.DirectoryEntries(); ok {
341 return d == target
342 }
343 case schema.TypeStaticSet:
344 for _, m := range b.StaticSetMembers() {
345 if m == target {
346 return true
347 }
348 }
349 }
350 return false
351}

Callers 1

handleGetViaSharingMethod · 0.85

Calls 8

BlobFromReaderFunction · 0.92
ContainsMethod · 0.80
BytePartsMethod · 0.80
DirectoryEntriesMethod · 0.80
StaticSetMembersMethod · 0.80
StringMethod · 0.45
TypeMethod · 0.45
ValidMethod · 0.45

Tested by

no test coverage detected