diff --git a/libraries/droplet/libarchive-rust b/libraries/droplet/libarchive-rust index bf474266..fdb73ef2 160000 --- a/libraries/droplet/libarchive-rust +++ b/libraries/droplet/libarchive-rust @@ -1 +1 @@ -Subproject commit bf47426655a9a6c537be753b8c4189191d2ef656 +Subproject commit fdb73ef2dedb031e396153113ff9eee4ee082dc2 diff --git a/libraries/droplet/src/main.rs b/libraries/droplet/src/main.rs index c512fe89..b37cc682 100644 --- a/libraries/droplet/src/main.rs +++ b/libraries/droplet/src/main.rs @@ -1,4 +1,4 @@ -use std::{env, os::unix::fs::MetadataExt, path::PathBuf}; +use std::{env, path::PathBuf}; use droplet_rs::manifest::generate_manifest_rusty; use tokio::runtime::Handle; @@ -11,7 +11,7 @@ pub async fn main() { let metrics = Handle::current().metrics(); println!("using {} workers", metrics.num_workers()); - let manifest = generate_manifest_rusty( + let _manifest = generate_manifest_rusty( &target_dir, |progress| println!("PROGRESS: {}", progress), |message| { @@ -21,37 +21,4 @@ pub async fn main() { ) .await .unwrap(); - - return; - - // Sanity checks - for (_, chunk_data) in manifest.chunks { - for file in chunk_data.files { - let path = target_dir.join(file.filename); - if !path.exists() { - panic!("{} doesn't exist", path.display()); - } - - let metadata = path.metadata().expect("failed to fetch metadata"); - let file_size = metadata.size(); - if file.start > file_size as usize { - panic!( - "start for {} doesn't make sense: start: {}, size: {}", - path.display(), - file.start, - file_size - ); - } - - let end_position = file.start + file.length; - if end_position > file_size as usize { - panic!( - "end for {} doesn't make sense: end: {}, size: {}", - path.display(), - end_position, - file_size - ); - } - } - } } diff --git a/libraries/droplet/src/manifest.rs b/libraries/droplet/src/manifest.rs index 9fe97ffc..964f2ec5 100644 --- a/libraries/droplet/src/manifest.rs +++ b/libraries/droplet/src/manifest.rs @@ -1,6 +1,5 @@ use std::{ collections::HashMap, - future::Future, mem, path::Path, sync::{ @@ -146,8 +145,8 @@ pub async fn generate_manifest_rusty( let total_manifest_length = Arc::new(AtomicU64::new(0)); // SAFETY: we .join_all() the futures using this - let backend: &'static Box = - unsafe { mem::transmute(&backend) }; + let backend: &'static (dyn VersionBackend + Send + Sync) = + unsafe { mem::transmute(&*backend) }; let mut futures: JoinSet> = JoinSet::new(); let (send_log, mut recieve_log) = tokio::sync::mpsc::channel(16); diff --git a/libraries/droplet/src/tests.rs b/libraries/droplet/src/tests.rs index d8d097f4..2b69c70c 100644 --- a/libraries/droplet/src/tests.rs +++ b/libraries/droplet/src/tests.rs @@ -19,7 +19,7 @@ fn manifest_gen(resource: &str) { runtime.block_on(async move { let filepath = Path::new(resource); let manifest = generate_manifest_rusty( - &filepath, + filepath, |_| {}, |message| { println!("({}) {}", filepath.display(), message); @@ -27,10 +27,13 @@ fn manifest_gen(resource: &str) { None, ) .await - .expect(&format!( - "failed to generate manifest for {}", - filepath.display() - )); + .unwrap_or_else(|err| { + panic!( + "failed to generate manifest for {}: {:?}", + filepath.display(), + err + ) + }); let mut output_path = filepath.to_path_buf(); output_path.set_extension("json"); diff --git a/libraries/droplet/src/versions/archive_backend.rs b/libraries/droplet/src/versions/archive_backend.rs index bf1604fa..75f84de6 100644 --- a/libraries/droplet/src/versions/archive_backend.rs +++ b/libraries/droplet/src/versions/archive_backend.rs @@ -49,7 +49,7 @@ impl AsyncRead for ArchiveReader { }; buf.put_slice(block); - return Poll::Ready(Ok(())); + Poll::Ready(Ok(())) } } diff --git a/libraries/droplet/src/versions/mod.rs b/libraries/droplet/src/versions/mod.rs index e73be877..6f3023c8 100644 --- a/libraries/droplet/src/versions/mod.rs +++ b/libraries/droplet/src/versions/mod.rs @@ -28,11 +28,12 @@ pub fn _list_files(vec: &mut Vec, path: &Path) -> Result<()> { Ok(()) } -const SUPPORTED_FILE_EXTENSIONS: [&'static str; 11] = [ +const SUPPORTED_FILE_EXTENSIONS: [&str; 11] = [ "tar", "pax", "cpio", "zip", "jar", "ar", "xar", "rar", "rpm", "7z", "iso", ]; pub mod types; +#[allow(clippy::type_complexity)] pub fn create_backend_constructor<'a>( path: &Path, ) -> Option Result>>> { @@ -48,11 +49,10 @@ pub fn create_backend_constructor<'a>( })); }; - let file_extension = path.extension().map(|v| v.to_str()).flatten()?; + let file_extension = path.extension().and_then(|v| v.to_str())?; if SUPPORTED_FILE_EXTENSIONS - .iter() - .any(|v| *v == file_extension) + .contains(&file_extension) { let buf = path.to_path_buf(); return Some(Box::new(move || Ok(Box::new(ZipVersionBackend::new(buf)?))));