feat(grove): support removing subtrees
feat: reorganize Store implementations into new package
bugfix: grove: ensure lack of children is cached too
bugfix: grove: different pointers to same nodeID now cache the same
feat: grove: use cache in nodeFromInfo()
bugfix: grove: stop leaking file descriptors
feat: grove: incorporate node cache as well
feat: grove: leverage simple child cache to speed up Children()
Ensure grove Add() doesn't rewrite existing files
Merge remote-tracking branch 'origin/master' into grove-children
Merge branch 'master' into grove-add
Merge remote-tracking branch 'origin/stub-copyinto'
Add stub implementation of CopyInto
Doing this method right would involve extending the grove.File
interface so that we could list the contents of directories.
This is doable, and it is the long-term plan. However, getting
Grove to be usable is more important, and this method isn't
critical to most Grove use-cases.
Merge remote-tracking branch 'origin/grove-impl3'
Implement specialized Get operations as wrappers
All of the more specialized Get() functions can be (inefficiently)
implemented as calls to the generic Get() function. For speed of
getting a working prototype, this is what I propose that we should
do for now. In the future, the Grove filesystem layout should allow
us to make getting nodes of a specific type a very efficient operation.
I've marked all of the functions with a bug tag that results from
not checking the type of the returned nodes. It was either that or
write specialized checking code that would just be scrapped later
anyway. This also saves the up-front cost of writing tests for these
functions right now, since they have no unique behavior. Obviously
they will need tests when their implementations diverge from the
generic operation though.
Merge remote-tracking branch 'origin/grove-impl2'
Add test to handle errors when opening node files
Add test to handle when nodes fail to parse
Document inefficiencies of current Add() implementation
Implement and test happy path for Add()
grove: test Recent() more thoroughly