Skip to content

Commit a17ba69

Browse files
committed
feat: no unixfs-preload use, matcher for consuming bytes
1 parent 1f8efba commit a17ba69

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

Diff for: signaling.go

+26-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package unixfsnode
22

33
import (
4+
"io"
5+
46
"github.com/ipld/go-ipld-prime"
57
"github.com/ipld/go-ipld-prime/datamodel"
68
"github.com/ipld/go-ipld-prime/linking"
79
"github.com/ipld/go-ipld-prime/node/basicnode"
10+
"github.com/ipld/go-ipld-prime/traversal"
811
"github.com/ipld/go-ipld-prime/traversal/selector"
912
"github.com/ipld/go-ipld-prime/traversal/selector/builder"
1013
)
@@ -27,7 +30,12 @@ var ExploreAllRecursivelySelector = specBuilder(func(ssb builder.SelectorSpecBui
2730
// MatchUnixfsPreloadSelector is precompiled for use with
2831
// UnixFSPathSelectorBuilder().
2932
var MatchUnixFSPreloadSelector = specBuilder(func(ssb builder.SelectorSpecBuilder) builder.SelectorSpec {
30-
return ssb.ExploreInterpretAs("unixfs-preload", ssb.Matcher())
33+
return ssb.ExploreInterpretAs("unixfs", ssb.ExploreUnion(ssb.Matcher(),
34+
ssb.ExploreRecursive(
35+
selector.RecursionLimitDepth(1),
36+
ssb.ExploreAll(ssb.ExploreRecursiveEdge()),
37+
),
38+
))
3139
})
3240

3341
// MatchUnixFSSelector is a selector that will match a single node, similar to
@@ -40,6 +48,23 @@ var MatchUnixFSSelector = specBuilder(func(ssb builder.SelectorSpecBuilder) buil
4048
return ssb.ExploreInterpretAs("unixfs", ssb.Matcher())
4149
})
4250

51+
// BytesConsumingMatcher is a traversal.WalkMatching matcher function that
52+
// consumes the bytes of a LargeBytesNode where one is matched. Use this in
53+
// conjunction with the Match* selectors in this package to ensure that all
54+
// blocks of sharded files are loaded during a traversal, or that the subset
55+
// of blocks required to fulful a range selector are loaded.
56+
func BytesConsumingMatcher(p traversal.Progress, n datamodel.Node) error {
57+
if lbn, ok := n.(datamodel.LargeBytesNode); ok {
58+
rdr, err := lbn.AsLargeBytes()
59+
if err != nil {
60+
return err
61+
}
62+
_, err = io.Copy(io.Discard, rdr)
63+
return err
64+
}
65+
return nil
66+
}
67+
4368
func AddUnixFSReificationToLinkSystem(lsys *ipld.LinkSystem) {
4469
if lsys.KnownReifiers == nil {
4570
lsys.KnownReifiers = make(map[string]linking.NodeReifier)

0 commit comments

Comments
 (0)