diff --git a/src/cargo/util/toml/embedded.rs b/src/cargo/util/toml/embedded.rs index 5248d8fdd..ac92a8958 100644 --- a/src/cargo/util/toml/embedded.rs +++ b/src/cargo/util/toml/embedded.rs @@ -73,12 +73,20 @@ fn write( ) -> CargoResult { let hash = hash(script).to_string(); assert_eq!(hash.len(), 64); + + let file_name = script + .path + .file_stem() + .ok_or_else(|| anyhow::format_err!("no file name"))? + .to_string_lossy(); + let name = sanitize_package_name(file_name.as_ref()); + let mut workspace_root = target_dir.to_owned(); workspace_root.push("eval"); workspace_root.push(&hash[0..2]); workspace_root.push(&hash[2..4]); workspace_root.push(&hash[4..]); - workspace_root.push(package_name(script)?); + workspace_root.push(name); std::fs::create_dir_all(&workspace_root).with_context(|| { format!( "failed to create temporary workspace at {}", @@ -126,7 +134,12 @@ fn expand_manifest_(script: &RawScript, config: &Config) -> CargoResult CargoResult CargoResult { - let name = script - .path - .file_stem() - .ok_or_else(|| anyhow::format_err!("no file name"))? - .to_string_lossy(); +fn sanitize_package_name(name: &str) -> String { let mut slug = String::new(); for (i, c) in name.chars().enumerate() { match (i, c) { @@ -204,7 +212,7 @@ fn package_name(script: &RawScript) -> CargoResult { } } } - Ok(slug) + slug } fn hash(script: &RawScript) -> blake3::Hash {