Closed ccamel closed 2 months ago
[!NOTE]
Reviews paused
Use the following commands to manage reviews:
@coderabbitai resume
to resume automatic reviews.@coderabbitai review
to trigger a single review.
The overall changes introduce a structured way to handle virtual file systems within the project. New functionalities include creating composite and filtered file systems, as well as specific file systems for WebAssembly environments. The modifications enhance the ability to manage and interact with these diverse file systems seamlessly, incorporating path validation, mounting logic, and improved testing utilities.
Files/Group | Summary |
---|---|
app/app.go |
Updated provideFS to create and mount composite and Wasm file systems. |
x/logic/fs/composite/fs.go |
Introduced composite filesystem interface and implementation for virtual file systems. |
x/logic/fs/filtered/fs.go |
Added filtered filesystem interface for path-whitelisting and blacklisting functionalities. |
x/logic/fs/provider.go |
Introduced a Provider type to derive filesystems from contexts. |
x/logic/fs/wasm/file.go |
Defined structures and methods for virtual Wasm files and their metadata. |
x/logic/fs/wasm/fs.go |
Implemented a filesystem to interact with data from a Wasm contract. |
x/logic/keeper/features_test.go |
Updated tests to utilize the new composite and Wasm filesystems. |
x/logic/keeper/interpreter.go and x/logic/keeper/keeper.go |
Modified imports, function calls, and variable types to align with new FS interfaces. |
Makefile |
Added mock generation for FS and ReadFileFS interfaces. |
x/logic/testutil/fs_mocks.go and read_file_fs_mocks.go |
Updated and added mock implementations for filesystem methods. |
x/logic/fs/composite/fs_test.go and x/logic/fs/filtered/fs_test.go |
Added test cases for composite and filtered filesystems. |
sequenceDiagram
participant App as Application
participant Composite as Composite FS
participant Wasm as Wasm FS
App->>Composite: Initialize Composite FS
Composite->>Composite: Mount Wasm FS
App->>Wasm: Create Wasm FS instance
Wasm-->>Composite: Wasm FS instance mounted
App->>Composite: Open file
Composite->>Composite: Validate and resolve path
Composite->>Wasm: Open file in Wasm FS
Wasm-->>Composite: File content
Composite-->>App: Return file content
App->>Composite: List mounts
Composite-->>App: Return mount points
In lands of code where bytes do spawn,
A rabbit hops from dusk to dawn,
New filesystems rise, oh what a sight!
With Wasm's glow and composite might.
Filters guard, paths they weave,
In this realm no file shall deceive.
🐇✨ A coder's dream in lines of gleam.
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
Attention: Patch coverage is 98.90110%
with 2 lines
in your changes missing coverage. Please review.
@@ Coverage Diff @@
## main #678 +/- ##
==========================================
+ Coverage 51.98% 54.35% +2.36%
==========================================
Files 75 74 -1
Lines 2824 2896 +72
==========================================
+ Hits 1468 1574 +106
+ Misses 1260 1226 -34
Partials 96 96
Files | Coverage Δ | |
---|---|---|
x/logic/fs/filtered/fs.go | 100.00% <100.00%> (ø) |
|
x/logic/fs/wasm/file.go | 100.00% <100.00%> (ø) |
|
x/logic/fs/wasm/fs.go | 100.00% <100.00%> (ø) |
|
x/logic/keeper/interpreter.go | 94.04% <100.00%> (ø) |
|
x/logic/keeper/keeper.go | 60.00% <ø> (ø) |
|
x/logic/fs/composite/fs.go | 96.22% <96.22%> (ø) |
@coderabbitai pause
By this PR, I’ve taken the liberty of refactoring a bit the Virtual File System of the
logic
module to make it more coherent and consistent, and to enhance its extensibility to other types of virtual file systems (for instance, a memory-based VFS could facilitate certain operations with Prolog streams - subject to evaluation).So we now have the following vfs:
I'd like to say that although it might be tempting to rely on existing VFS implementations (such as C2FO/vfs, mandelsoft/vfs or spf13/afero), this refactoring builds on what already exists and offers the simplest possible implementation, focused specifically on the needs of the
logic
module.Note: the PR introduces no breaking changes; it only refines some error messages, and the tests have been updated accordingly.
Summary by CodeRabbit
New Features
Bug Fixes
Tests
Chores