diff options
| author | Paul Gey <narpfel@gmx.de> | 2024-05-28 22:28:55 +0200 |
|---|---|---|
| committer | Paul Gey <narpfel@gmx.de> | 2024-05-28 22:28:55 +0200 |
| commit | d5235f91ad4807a955bace31668c03c5afa353eb (patch) | |
| tree | 67e89079be8d858114a0f60dbb0a2013106cb1c4 | |
| parent | 9d162eb3fe96c4267630ec1ee5c16028e3b717ea (diff) | |
| download | rust-d5235f91ad4807a955bace31668c03c5afa353eb.tar.gz rust-d5235f91ad4807a955bace31668c03c5afa353eb.zip | |
Fix "local crate" detection
`PackageId` is an opaque identifier whose internal format is subject to change, so looking up the names of local crates by ID is more robust than parsing the ID. Resolves #3643.
| -rw-r--r-- | src/tools/miri/cargo-miri/src/util.rs | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/tools/miri/cargo-miri/src/util.rs b/src/tools/miri/cargo-miri/src/util.rs index 5b6a391aabc..f36cff1f798 100644 --- a/src/tools/miri/cargo-miri/src/util.rs +++ b/src/tools/miri/cargo-miri/src/util.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use std::env; use std::ffi::OsString; use std::fs::File; @@ -233,21 +234,18 @@ pub fn get_cargo_metadata() -> Metadata { } /// Pulls all the crates in this workspace from the cargo metadata. -/// Workspace members are emitted like "miri 0.1.0 (path+file:///path/to/miri)" /// Additionally, somewhere between cargo metadata and TyCtxt, '-' gets replaced with '_' so we /// make that same transformation here. pub fn local_crates(metadata: &Metadata) -> String { assert!(!metadata.workspace_members.is_empty()); - let mut local_crates = String::new(); - for member in &metadata.workspace_members { - let name = member.repr.split(' ').next().unwrap(); - let name = name.replace('-', "_"); - local_crates.push_str(&name); - local_crates.push(','); - } - local_crates.pop(); // Remove the trailing ',' - - local_crates + let package_name_by_id: HashMap<_, _> = + metadata.packages.iter().map(|package| (&package.id, package.name.as_str())).collect(); + metadata + .workspace_members + .iter() + .map(|id| package_name_by_id[id].replace('-', "_")) + .collect::<Vec<_>>() + .join(",") } /// Debug-print a command that is going to be run. |
