feat(tvix/castore): process_entry cannot process unsupported nodes

In the past, we had a `todo!` on unsupported node types, this returns a proper error
that can be caught by the caller.

Change-Id: Icba4c1dab33c0d670a97f162c9b358d1ed5855cb
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10675
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
Ryan Lahfa 2024-01-20 21:11:29 +01:00 committed by raitobezarius
parent 0ae751a89f
commit 68bba48d59

View file

@ -10,7 +10,11 @@ use crate::Error as CastoreError;
use async_stream::stream; use async_stream::stream;
use futures::pin_mut; use futures::pin_mut;
use futures::Stream; use futures::Stream;
use std::fs::FileType;
#[cfg(target_family = "unix")]
use std::os::unix::ffi::OsStrExt; use std::os::unix::ffi::OsStrExt;
use std::{ use std::{
collections::HashMap, collections::HashMap,
fmt::Debug, fmt::Debug,
@ -41,6 +45,9 @@ pub enum Error {
#[error("unable to read {0}: {1}")] #[error("unable to read {0}: {1}")]
UnableToRead(PathBuf, std::io::Error), UnableToRead(PathBuf, std::io::Error),
#[error("unsupported file {0} type: {1:?}")]
UnsupportedFileType(PathBuf, FileType),
} }
impl From<CastoreError> for Error { impl From<CastoreError> for Error {
@ -145,7 +152,12 @@ where
executable: metadata.permissions().mode() & 64 != 0, executable: metadata.permissions().mode() & 64 != 0,
})); }));
} }
todo!("handle other types")
// Nix says things like: error: file '/home/raito/dev/code.tvl.fyi/tvix/glue/src/tests/import_fixtures/a_devnode' has an unsupported type
Err(Error::UnsupportedFileType(
entry.path().to_path_buf(),
file_type,
))
} }
/// Walk the filesystem at a given path and returns a level-keyed list of directory entries. /// Walk the filesystem at a given path and returns a level-keyed list of directory entries.