about summary refs log tree commit diff
path: root/tvix/store/src/bin
diff options
context:
space:
mode:
Diffstat (limited to 'tvix/store/src/bin')
-rw-r--r--tvix/store/src/bin/tvix-store.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/tvix/store/src/bin/tvix-store.rs b/tvix/store/src/bin/tvix-store.rs
index 8c278c433997..ce2701157110 100644
--- a/tvix/store/src/bin/tvix-store.rs
+++ b/tvix/store/src/bin/tvix-store.rs
@@ -25,6 +25,7 @@ use tvix_store::proto::GRPCBlobServiceWrapper;
 use tvix_store::proto::GRPCDirectoryServiceWrapper;
 use tvix_store::proto::GRPCPathInfoServiceWrapper;
 use tvix_store::TvixStoreIO;
+use tvix_store::FUSE;
 
 #[cfg(feature = "reflection")]
 use tvix_store::proto::FILE_DESCRIPTOR_SET;
@@ -59,6 +60,12 @@ enum Commands {
         #[clap(value_name = "PATH")]
         paths: Vec<PathBuf>,
     },
+    /// Mounts a tvix-store at the given mountpoint
+    #[cfg(feature = "fuse")]
+    Mount {
+        #[clap(value_name = "PATH")]
+        dest: PathBuf,
+    },
 }
 
 #[tokio::main]
@@ -172,6 +179,25 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
 
             try_join_all(tasks).await?;
         }
+        #[cfg(feature = "fuse")]
+        Commands::Mount { dest } => {
+            let blob_service = GRPCBlobService::from_client(
+                BlobServiceClient::connect("http://[::1]:8000").await?,
+            );
+            let directory_service = GRPCDirectoryService::from_client(
+                DirectoryServiceClient::connect("http://[::1]:8000").await?,
+            );
+            let path_info_service_client =
+                PathInfoServiceClient::connect("http://[::1]:8000").await?;
+            let path_info_service =
+                GRPCPathInfoService::from_client(path_info_service_client.clone());
+
+            tokio::task::spawn_blocking(move || {
+                let f = FUSE::new(path_info_service, directory_service, blob_service);
+                fuser::mount2(f, &dest, &[])
+            })
+            .await??
+        }
     };
     Ok(())
 }