Skip to content

Commit 69d7946

Browse files
committed
Metadata refactor 3
1 parent 2010891 commit 69d7946

File tree

5 files changed

+58
-50
lines changed

5 files changed

+58
-50
lines changed

crates/forge/src/clean.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::{CleanArgs, CleanComponent};
22
use anyhow::{Context, Result, ensure};
33
use camino::Utf8PathBuf;
44
use foundry_ui::UI;
5-
use scarb_api::metadata::get_metadata;
5+
use scarb_api::metadata::{MetadataOpts, get_metadata_with_opts};
66
use std::fs;
77

88
const COVERAGE_DIR: &str = "coverage";
@@ -26,7 +26,10 @@ pub fn clean(args: CleanArgs, ui: &UI) -> Result<()> {
2626
args.clean_components
2727
};
2828

29-
let scarb_metadata = get_metadata()?;
29+
let scarb_metadata = get_metadata_with_opts(MetadataOpts {
30+
no_deps: true,
31+
..MetadataOpts::default()
32+
})?;
3033
let workspace_root = scarb_metadata.workspace.root;
3134

3235
let packages_root: Vec<Utf8PathBuf> = scarb_metadata

crates/forge/src/run_tests/workspace.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ use anyhow::{Context, Result};
1717
use forge_runner::test_case_summary::AnyTestCaseSummary;
1818
use forge_runner::{CACHE_DIR, test_target_summary::TestTargetSummary};
1919
use foundry_ui::UI;
20+
use scarb_api::metadata::{MetadataOpts, get_metadata_with_opts};
2021
use scarb_api::{
2122
ScarbCommand,
22-
metadata::{Metadata, MetadataCommandExt, PackageMetadata},
23+
metadata::{Metadata, PackageMetadata},
2324
target_dir_for_workspace,
2425
};
25-
use scarb_metadata::MetadataCommand;
2626
use scarb_ui::args::PackagesFilter;
2727
use shared::consts::SNFORGE_TEST_FILTER;
2828
use std::env;
@@ -38,11 +38,10 @@ pub async fn run_for_workspace(args: TestArgs, ui: Arc<UI>) -> Result<ExitStatus
3838
ColorOption::Auto => (),
3939
}
4040

41-
let mut metadata_command = MetadataCommand::new();
42-
if let Some(profile) = &args.scarb_args.profile.specified() {
43-
metadata_command.profile(profile.clone());
44-
}
45-
let scarb_metadata = metadata_command.inherit_stderr().run()?;
41+
let scarb_metadata = get_metadata_with_opts(MetadataOpts {
42+
profile: args.scarb_args.profile.specified(),
43+
..MetadataOpts::default()
44+
})?;
4645

4746
check_profile_compatibility(&args, &scarb_metadata)?;
4847

crates/forge/tests/e2e/clean.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::common::runner::{runner, setup_package, test_runner};
22
use assert_fs::TempDir;
33
use camino::Utf8PathBuf;
4-
use scarb_api::metadata::get_metadata_for_dir;
4+
use scarb_api::metadata::{MetadataOpts, get_metadata_with_opts};
55
use shared::test_utils::output_assert::assert_stdout_contains;
66
use std::path::Path;
77

@@ -230,7 +230,12 @@ fn generate_clean_components(state: CleanComponentsState, temp_dir: &TempDir) {
230230
}
231231

232232
fn check_clean_components_state(path: &Path) -> CleanComponentsState {
233-
let scarb_metadata = get_metadata_for_dir(path).unwrap();
233+
let scarb_metadata = get_metadata_with_opts(MetadataOpts {
234+
no_deps: true,
235+
current_dir: Some(path.into()),
236+
..MetadataOpts::default()
237+
})
238+
.unwrap();
234239

235240
let workspace_root = scarb_metadata.workspace.root;
236241

crates/scarb-api/src/metadata.rs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,48 @@
1+
use crate::ScarbCommand;
12
use anyhow::{Context, Result};
23
pub use scarb_metadata::{Metadata, MetadataCommand, MetadataCommandError, PackageMetadata};
34
use std::path::PathBuf;
45

5-
pub trait MetadataCommandExt {
6-
fn run(&mut self) -> Result<Metadata>;
7-
}
8-
9-
impl MetadataCommandExt for MetadataCommand {
10-
fn run(&mut self) -> Result<Metadata> {
11-
self.inherit_stdout()
12-
.exec()
13-
.context("error: could not gather project metadata from Scarb due to previous error")
14-
}
6+
#[derive(Default)]
7+
pub struct MetadataOpts {
8+
pub current_dir: Option<PathBuf>,
9+
pub no_deps: bool,
10+
pub profile: Option<String>,
1511
}
1612

1713
pub fn get_metadata_for_dir(dir: impl Into<PathBuf>) -> Result<Metadata> {
18-
get_metadata_inner(Some(dir))
14+
get_metadata_with_opts(MetadataOpts {
15+
current_dir: Some(dir.into()),
16+
..MetadataOpts::default()
17+
})
1918
}
2019

2120
pub fn get_metadata() -> Result<Metadata> {
22-
get_metadata_inner(None::<PathBuf>)
21+
get_metadata_with_opts(MetadataOpts::default())
2322
}
2423

25-
fn get_metadata_inner(current_dir: Option<impl Into<PathBuf>>) -> Result<Metadata> {
24+
pub fn get_metadata_with_opts(
25+
MetadataOpts {
26+
current_dir,
27+
no_deps,
28+
profile,
29+
}: MetadataOpts,
30+
) -> Result<Metadata> {
31+
ScarbCommand::new().ensure_available()?;
2632
let mut command = MetadataCommand::new();
2733

2834
if let Some(dir) = current_dir {
2935
command.current_dir(dir);
3036
}
3137

38+
if let Some(profile) = profile {
39+
command.profile(profile);
40+
}
41+
42+
if no_deps {
43+
command.no_deps();
44+
}
45+
3246
command
3347
.inherit_stderr()
3448
.inherit_stdout()

crates/sncast/src/helpers/scarb_utils.rs

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ use crate::helpers::artifacts::CastStarknetContractArtifacts;
22
use anyhow::{Context, Result, anyhow};
33
use camino::{Utf8Path, Utf8PathBuf};
44
use foundry_ui::{UI, components::warning::WarningMessage};
5+
use scarb_api::metadata::{MetadataOpts, get_metadata_for_dir, get_metadata_with_opts};
56
use scarb_api::{
67
CompilationOpts, ScarbCommand, ScarbCommandError,
78
get_contracts_artifacts_and_source_sierra_paths,
8-
metadata::{Metadata, MetadataCommand, PackageMetadata},
9+
metadata::{Metadata, PackageMetadata},
910
target_dir_for_workspace,
1011
};
1112
use scarb_ui::args::PackagesFilter;
1213
use shared::command::CommandExt;
1314
use std::collections::HashMap;
14-
use std::env;
1515
use std::str::FromStr;
1616

1717
pub fn get_scarb_manifest() -> Result<Utf8PathBuf> {
@@ -37,34 +37,21 @@ pub fn get_scarb_manifest_for(dir: &Utf8Path) -> Result<Utf8PathBuf> {
3737
Ok(path)
3838
}
3939

40-
fn get_scarb_metadata_command(manifest_path: &Utf8PathBuf) -> Result<MetadataCommand> {
41-
ScarbCommand::new().ensure_available()?;
42-
43-
let mut command = MetadataCommand::new();
44-
command.inherit_stderr().manifest_path(manifest_path);
45-
Ok(command)
46-
}
47-
48-
fn execute_scarb_metadata_command(command: &MetadataCommand) -> Result<Metadata> {
49-
command.exec().context(format!(
50-
"Failed to read the `Scarb.toml` manifest file. Doesn't exist in the current or parent directories = {}",
51-
env::current_dir()
52-
.expect("Failed to access the current directory")
53-
.into_os_string()
54-
.into_string()
55-
.expect("Failed to convert current directory into a string")
56-
))
57-
}
58-
5940
pub fn get_scarb_metadata(manifest_path: &Utf8PathBuf) -> Result<Metadata> {
60-
let mut command = get_scarb_metadata_command(manifest_path)?;
61-
let command = command.no_deps();
62-
execute_scarb_metadata_command(command)
41+
get_metadata_with_opts(MetadataOpts {
42+
current_dir: Some(
43+
manifest_path
44+
.parent()
45+
.expect("manifest should have parent")
46+
.into(),
47+
),
48+
no_deps: true,
49+
..MetadataOpts::default()
50+
})
6351
}
6452

6553
pub fn get_scarb_metadata_with_deps(manifest_path: &Utf8PathBuf) -> Result<Metadata> {
66-
let command = get_scarb_metadata_command(manifest_path)?;
67-
execute_scarb_metadata_command(&command)
54+
get_metadata_for_dir(manifest_path.parent().expect("manifest should have parent"))
6855
}
6956

7057
pub fn get_cairo_version(manifest_path: &Utf8PathBuf) -> Result<String> {

0 commit comments

Comments
 (0)