@cryptotaxi247 / kubo / commits / de6a6e3e4

path: simplify ResolveToLastNode

License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>

Łukasz Magiera committed Jul 23, 2018 at 17:37 UTC de6a6e3e44eff6aa61ccf1586b3926929f16c794
1 file changed +27 -19
path/resolver/resolver.go
+27 -19
@@ -70,33 +70,41 @@ func (r *Resolver) ResolveToLastNode(ctx context.Context, fpath path.Path) (ipld
70
71 for len(p) > 0 {
72 lnk, rest, err := r.ResolveOnce(ctx, r.DAG, nd, p)
73 - if lnk != nil {
74 - if err != nil {
75 - return nil, nil, err
76 - }
77 -
78 - next, err := lnk.GetNode(ctx, r.DAG)
79 - if err != nil {
80 - return nil, nil, err
81 - }
82 - nd = next
83 - p = rest
84 - continue
73 + if lnk == nil {
74 + break
75 }
76
87 - val, rest, err := nd.Resolve(p)
77 if err != nil {
78 return nil, nil, err
79 }
91 - switch val.(type) {
92 - case *ipld.Link:
93 - return nil, nil, errors.New("inconsistent ResolveOnce / nd.Resolve")
94 - default:
95 - return nd, p, nil
80 +
81 + next, err := lnk.GetNode(ctx, r.DAG)
82 + if err != nil {
83 + return nil, nil, err
84 }
85 + nd = next
86 + p = rest
87 }
88
99 - return nd, nil, nil
89 + if len(p) == 0 {
90 + return nd, nil, nil
91 + }
92 +
93 + // Confirm the path exists within the object
94 + val, rest, err := nd.Resolve(p)
95 + if err != nil {
96 + return nil, nil, err
97 + }
98 +
99 + if len(rest) > 0 {
100 + return nil, nil, errors.New("path failed to resolve fully")
101 + }
102 + switch val.(type) {
103 + case *ipld.Link:
104 + return nil, nil, errors.New("inconsistent ResolveOnce / nd.Resolve")
105 + default:
106 + return nd, p, nil
107 + }
108 }
109
110 // ResolvePath fetches the node for given path. It returns the last item