Respond to Cargo metadata format change

This commit is contained in:
Zhang Junyang
2024-04-01 19:38:18 +08:00
committed by Tate, Hongliang Tian
parent 10690063eb
commit 6dec96c7e1

View File

@ -162,18 +162,48 @@ pub fn get_current_crate_info() -> CrateInfo {
let metadata = get_cargo_metadata(None::<&str>, None::<&[&str]>).unwrap(); let metadata = get_cargo_metadata(None::<&str>, None::<&[&str]>).unwrap();
let default_member = get_default_member(&metadata); let default_member = get_default_member(&metadata);
// Prior 202403 (Rust 1.77.1), the default member string here is in the form of
// The default member string here is in the form of "<crate_name> <crate_version> (path+file://<crate_path>)" // "<crate_name> <crate_version> (path+file://<crate_path>)".
let default_member = default_member.split(' ').collect::<Vec<&str>>(); // After that, it's
let name = default_member[0].to_string(); // "path+file://<crate_path>#<crate_name>@<crate_version>", in which the crate
let version = default_member[1].to_string(); // name might not exist if it is the last component of the path.
let path = default_member[2] if default_member.starts_with("path+file://") {
.trim_start_matches("(path+file://") // After 1.77.1
.trim_end_matches(')') if default_member.contains('@') {
let default_member = default_member.split(['#', '@']).collect::<Vec<&str>>();
CrateInfo {
name: default_member[1].to_string(),
version: default_member[2].to_string(),
path: default_member[0]
.trim_start_matches("path+file://")
.to_string(),
}
} else {
let default_member = default_member.split(['#']).collect::<Vec<&str>>();
let path = default_member[0]
.trim_start_matches("path+file://")
.to_string(); .to_string();
CrateInfo { CrateInfo {
name, name: PathBuf::from(path.clone())
version, .file_name()
.unwrap()
.to_str()
.unwrap()
.to_string(),
version: default_member[1].to_string(),
path, path,
} }
}
} else {
// Before 1.77.1
let default_member = default_member.split(' ').collect::<Vec<&str>>();
CrateInfo {
name: default_member[0].to_string(),
version: default_member[1].to_string(),
path: default_member[2]
.trim_start_matches("(path+file://")
.trim_end_matches(')')
.to_string(),
}
}
} }