impl CargoWorkspace {
pub fn fetch_metadata(
cargo_toml: &ManifestPath,
+ current_dir: &AbsPath,
config: &CargoConfig,
progress: &dyn Fn(String),
) -> Result<cargo_metadata::Metadata> {
meta.features(CargoOpt::SomeFeatures(config.features.clone()));
}
}
- meta.current_dir(cargo_toml.parent().as_os_str());
+ meta.current_dir(current_dir.as_os_str());
if let Some(target) = target {
meta.other_options(vec![String::from("--filter-platform"), target]);
cmd
})?;
- let meta = CargoWorkspace::fetch_metadata(&cargo_toml, config, progress)
- .with_context(|| {
- format!(
- "Failed to read Cargo metadata from Cargo.toml file {}, {}",
- cargo_toml.display(),
- cargo_version
- )
- })?;
+ let meta = CargoWorkspace::fetch_metadata(
+ &cargo_toml,
+ cargo_toml.parent(),
+ config,
+ progress,
+ )
+ .with_context(|| {
+ format!(
+ "Failed to read Cargo metadata from Cargo.toml file {}, {}",
+ cargo_toml.display(),
+ cargo_version
+ )
+ })?;
let cargo = CargoWorkspace::new(meta);
let sysroot = if config.no_sysroot {
let rustc = match rustc_dir {
Some(rustc_dir) => Some({
- let meta = CargoWorkspace::fetch_metadata(&rustc_dir, config, progress)
- .with_context(|| {
- "Failed to read Cargo metadata for Rust sources".to_string()
- })?;
+ let meta = CargoWorkspace::fetch_metadata(
+ &rustc_dir,
+ cargo_toml.parent(),
+ config,
+ progress,
+ )
+ .with_context(|| {
+ "Failed to read Cargo metadata for Rust sources".to_string()
+ })?;
CargoWorkspace::new(meta)
}),
None => None,