func (h *dbHashTree) Walk(path string, f func(path string, node *NodeProto) error) error {
	path = clean(path)
	return h.View(func(tx *bolt.Tx) error {
		c := fs(tx).Cursor()
		for k, v := c.Seek(b(path)); k != nil && strings.HasPrefix(s(k), path); k, v = c.Next() {
			node := &NodeProto{}
			if err := node.Unmarshal(v); err != nil {
				return err
			}
			nodePath := s(k)
			if nodePath == "" {
				nodePath = "/"
			}
			if nodePath != path && !strings.HasPrefix(nodePath, path+"/") {
				// node is a sibling of path, and thus doesn't get walked
				continue
			}
			if err := f(nodePath, node); err != nil {
				if err == errutil.ErrBreak {
					return nil
				}
				return err
			}
		}
		return nil
	})
}
func (h *dbHashTree) Walk(path string, f func(path string, node *NodeProto) error) error {
	path = clean(path)
	return h.View(func(tx *bolt.Tx) error {
		c := fs(tx).Cursor()
		for k, v := c.Seek(b(path)); k != nil && strings.HasPrefix(s(k), path); k, v = c.Next() {
			node := &NodeProto{}
			if err := node.Unmarshal(v); err != nil {
				return err
			}
			nodePath := s(k)
			if nodePath == "" {
				nodePath = "/"
			}
			if nodePath != path && !strings.HasPrefix(nodePath, path+"/") {
				
				continue
			}
			if err := f(nodePath, node); err != nil {
				if err == errutil.ErrBreak {
					return nil
				}
				return err
			}
		}
		return nil
	})
}
func ( h * dbHashTree ) Walk ( path string , f func ( path string , node * NodeProto ) error ) error { path = clean ( path ) return h . View ( func ( tx * bolt . Tx ) error { c := fs ( tx ) . Cursor ( ) for k , v := c . Seek ( b ( path ) ) ; k != nil && strings . HasPrefix ( s ( k ) , path ) ; k , v = c . Next ( ) { node := & NodeProto { } if err := node . Unmarshal ( v ) ; err != nil { return err } nodePath := s ( k ) if nodePath == " " { nodePath = " " } if nodePath != path && ! strings . HasPrefix ( nodePath , path + " " ) { // node is a sibling of path, and thus doesn't get walked continue } if err := f ( nodePath , node ) ; err != nil { if err == errutil . ErrBreak { return nil } return err } } return nil } ) }
// Walk executes a callback against every node in the subtree of path.
Walk executes a callback against every node in the subtree of path .