(ref blob.Ref, opts *camtypes.EdgesToOpts)
| 1535 | } |
| 1536 | |
| 1537 | func (x *Index) EdgesTo(ref blob.Ref, opts *camtypes.EdgesToOpts) (edges []*camtypes.Edge, err error) { |
| 1538 | it := x.queryPrefix(keyEdgeBackward, ref) |
| 1539 | defer closeIterator(it, &err) |
| 1540 | permanodeParents := make(map[string]*camtypes.Edge) |
| 1541 | for it.Next() { |
| 1542 | edge, ok := kvEdgeBackward(it.Key(), it.Value()) |
| 1543 | if !ok { |
| 1544 | continue |
| 1545 | } |
| 1546 | if x.IsDeleted(edge.From) { |
| 1547 | continue |
| 1548 | } |
| 1549 | if x.IsDeleted(edge.BlobRef) { |
| 1550 | continue |
| 1551 | } |
| 1552 | edge.To = ref |
| 1553 | if edge.FromType == schema.TypePermanode { |
| 1554 | permanodeParents[edge.From.String()] = edge |
| 1555 | } else { |
| 1556 | edges = append(edges, edge) |
| 1557 | } |
| 1558 | } |
| 1559 | for _, e := range permanodeParents { |
| 1560 | edges = append(edges, e) |
| 1561 | } |
| 1562 | return edges, nil |
| 1563 | } |
| 1564 | |
| 1565 | func kvEdgeBackward(k, v string) (edge *camtypes.Edge, ok bool) { |
| 1566 | // TODO(bradfitz): garbage |
nothing calls this directly
no test coverage detected