From a91c7403c9068b68fed3f4b2a6fc159049cfd3d8 Mon Sep 17 00:00:00 2001 From: John Hughes Date: Thu, 11 Dec 2025 17:19:32 +0100 Subject: [PATCH] Extract the crate name from the path argument of `cargo osdk new` --- osdk/src/commands/new/mod.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/osdk/src/commands/new/mod.rs b/osdk/src/commands/new/mod.rs index 3653b6ba2..905a3d0a9 100644 --- a/osdk/src/commands/new/mod.rs +++ b/osdk/src/commands/new/mod.rs @@ -12,11 +12,21 @@ use crate::{ pub fn execute_new_command(args: &NewArgs) { cargo_new_lib(&args.crate_name); + + // Extract the actual crate name from the path if a full path was provided. + // `cargo new` accepts both "my-crate" and "/path/to/my-crate", and in the + // latter case, it uses the last path component as the crate name. + let crate_name = PathBuf::from(&args.crate_name) + .file_name() + .and_then(|name| name.to_str()) + .map(|name| name.to_string()) + .unwrap_or_else(|| args.crate_name.clone()); + let cargo_metadata = get_cargo_metadata(Some(&args.crate_name), None::<&[&str]>).unwrap(); - add_manifest_dependencies(&cargo_metadata, &args.crate_name); + add_manifest_dependencies(&cargo_metadata, &crate_name); create_osdk_manifest(&cargo_metadata, &args.project_type()); exclude_osdk_base(&cargo_metadata); - write_src_template(&cargo_metadata, &args.crate_name, &args.project_type()); + write_src_template(&cargo_metadata, &crate_name, &args.project_type()); add_rust_toolchain(&cargo_metadata); }