Skip to content

Commit 2f3775b

Browse files
authored
Include MetadataCommand and scarb_version_command into ScarbCommand (#1621)
<!-- Reference any GitHub issues resolved by this PR --> Closes #1564 ## Introduced changes <!-- A brief description of the changes --> - Included `MetadataCommand` and `scarb_version_command` into `ScarbCommand` for consistency ## Checklist <!-- Make sure all of these are complete --> - [x] Linked relevant issue - [x] Updated relevant documentation - [x] Added relevant tests - [x] Performed self-review of the code - [x] Added changes to `CHANGELOG.md`
1 parent bddee0e commit 2f3775b

File tree

12 files changed

+118
-86
lines changed

12 files changed

+118
-86
lines changed

crates/cheatnet/tests/common/mod.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ use cheatnet::runtime_extensions::common::{create_entry_point_selector, create_e
1212
use cheatnet::runtime_extensions::forge_runtime_extension::cheatcodes::deploy::deploy;
1313
use cheatnet::state::{BlockifierState, CheatnetState};
1414
use conversions::felt252::FromShortString;
15-
use scarb_api::{get_contracts_map, StarknetContractArtifacts};
15+
use scarb_api::metadata::MetadataCommandExt;
16+
use scarb_api::{get_contracts_map, ScarbCommand, StarknetContractArtifacts};
1617
use starknet::core::utils::get_selector_from_name;
1718
use starknet_api::core::ContractAddress;
1819
use starknet_api::core::PatriciaKey;
@@ -36,10 +37,10 @@ pub fn recover_data(output: CallResult) -> Vec<Felt252> {
3637
}
3738

3839
pub fn get_contracts() -> HashMap<String, StarknetContractArtifacts> {
39-
let scarb_metadata = scarb_metadata::MetadataCommand::new()
40+
let scarb_metadata = ScarbCommand::metadata()
4041
.inherit_stderr()
4142
.manifest_path(Utf8PathBuf::from("tests/contracts/Scarb.toml"))
42-
.exec()
43+
.run()
4344
.unwrap();
4445

4546
let package = scarb_metadata.packages.first().unwrap();

crates/forge/src/init.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use anyhow::{anyhow, Context, Ok, Result};
22

33
use include_dir::{include_dir, Dir};
44

5-
use scarb_api::version::scarb_version_command;
65
use scarb_api::ScarbCommand;
76
use std::fs::{self, OpenOptions};
87
use std::io::Write;
@@ -105,7 +104,7 @@ pub fn run(project_name: &str) -> Result<()> {
105104
.run()
106105
.context("Failed to add snforge_std")?;
107106

108-
let cairo_version = scarb_version_command()?.cairo;
107+
let cairo_version = ScarbCommand::version().run()?.cairo;
109108
ScarbCommand::new_with_stdio()
110109
.current_dir(&project_path)
111110
.offline()

crates/forge/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use anyhow::{anyhow, Result};
22
use camino::Utf8Path;
3+
use scarb_api::ScarbCommand;
34

45
use crate::scarb::load_test_artifacts;
56
use forge_runner::test_case_summary::AnyTestCaseSummary;
@@ -13,7 +14,6 @@ use forge_runner::{RunnerConfig, RunnerParams, TestCrateRunResult};
1314
use crate::block_number_map::BlockNumberMap;
1415
use crate::pretty_printing::print_warning;
1516
use forge_runner::compiled_runnable::{CompiledTestCrateRunnable, TestCaseRunnable};
16-
use scarb_api::version::scarb_version_command;
1717

1818
use crate::scarb::config::ForkTarget;
1919
use crate::test_filter::TestsFilter;
@@ -175,7 +175,7 @@ fn warn_if_available_gas_used_with_incompatible_scarb_version(
175175
for test_crate in test_crates {
176176
for case in &test_crate.test_cases {
177177
if case.available_gas == Some(0)
178-
&& scarb_version_command()?.scarb <= Version::new(2, 4, 3)
178+
&& ScarbCommand::version().run()?.scarb <= Version::new(2, 4, 3)
179179
{
180180
print_warning(&anyhow!(
181181
"`available_gas` attribute was probably specified when using Scarb ~2.4.3 \

crates/forge/src/main.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ use forge_runner::test_crate_summary::TestCrateSummary;
1414
use forge_runner::{RunnerConfig, RunnerParams, CACHE_DIR};
1515
use rand::{thread_rng, RngCore};
1616
use scarb_api::{
17-
get_contracts_map, package_matches_version_requirement, target_dir_for_workspace, ScarbCommand,
17+
get_contracts_map,
18+
metadata::{Metadata, MetadataCommandExt, PackageMetadata},
19+
package_matches_version_requirement, target_dir_for_workspace, ScarbCommand,
1820
};
19-
use scarb_metadata::{Metadata, MetadataCommand, PackageMetadata};
2021
use scarb_ui::args::PackagesFilter;
2122

2223
use forge::block_number_map::BlockNumberMap;
@@ -183,7 +184,7 @@ fn test_workspace(args: TestArgs) -> Result<bool> {
183184
ColorOption::Auto => (),
184185
}
185186

186-
let scarb_metadata = MetadataCommand::new().inherit_stderr().exec()?;
187+
let scarb_metadata = ScarbCommand::metadata().inherit_stderr().run()?;
187188
warn_if_snforge_std_not_compatible(&scarb_metadata)?;
188189

189190
let workspace_root = scarb_metadata.workspace.root.clone();

crates/forge/src/scarb.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ mod tests {
7373
use assert_fs::TempDir;
7474
use camino::Utf8PathBuf;
7575
use indoc::{formatdoc, indoc};
76-
use scarb_metadata::MetadataCommand;
76+
use scarb_api::metadata::MetadataCommandExt;
7777
use std::str::FromStr;
7878
use test_utils::tempdir_with_tool_versions;
7979

@@ -134,10 +134,10 @@ mod tests {
134134
#[test]
135135
fn get_forge_config_for_package() {
136136
let temp = setup_package("simple_package");
137-
let scarb_metadata = MetadataCommand::new()
137+
let scarb_metadata = ScarbCommand::metadata()
138138
.inherit_stderr()
139139
.current_dir(temp.path())
140-
.exec()
140+
.run()
141141
.unwrap();
142142

143143
let config =
@@ -184,10 +184,10 @@ mod tests {
184184
#[test]
185185
fn get_forge_config_for_package_err_on_invalid_package() {
186186
let temp = setup_package("simple_package");
187-
let scarb_metadata = MetadataCommand::new()
187+
let scarb_metadata = ScarbCommand::metadata()
188188
.inherit_stderr()
189189
.current_dir(temp.path())
190-
.exec()
190+
.run()
191191
.unwrap();
192192

193193
let result = config_from_scarb_for_package(
@@ -213,10 +213,10 @@ mod tests {
213213
);
214214
temp.child("Scarb.toml").write_str(content).unwrap();
215215

216-
let scarb_metadata = MetadataCommand::new()
216+
let scarb_metadata = ScarbCommand::metadata()
217217
.inherit_stderr()
218218
.current_dir(temp.path())
219-
.exec()
219+
.run()
220220
.unwrap();
221221

222222
let config =
@@ -248,10 +248,10 @@ mod tests {
248248
);
249249
temp.child("Scarb.toml").write_str(content).unwrap();
250250

251-
let scarb_metadata = MetadataCommand::new()
251+
let scarb_metadata = ScarbCommand::metadata()
252252
.inherit_stderr()
253253
.current_dir(temp.path())
254-
.exec()
254+
.run()
255255
.unwrap();
256256
let err =
257257
config_from_scarb_for_package(&scarb_metadata, &scarb_metadata.workspace.members[0])
@@ -278,10 +278,10 @@ mod tests {
278278
);
279279
temp.child("Scarb.toml").write_str(content).unwrap();
280280

281-
let scarb_metadata = MetadataCommand::new()
281+
let scarb_metadata = ScarbCommand::metadata()
282282
.inherit_stderr()
283283
.current_dir(temp.path())
284-
.exec()
284+
.run()
285285
.unwrap();
286286
let err =
287287
config_from_scarb_for_package(&scarb_metadata, &scarb_metadata.workspace.members[0])
@@ -306,10 +306,10 @@ mod tests {
306306
);
307307
temp.child("Scarb.toml").write_str(content).unwrap();
308308

309-
let scarb_metadata = MetadataCommand::new()
309+
let scarb_metadata = ScarbCommand::metadata()
310310
.inherit_stderr()
311311
.current_dir(temp.path())
312-
.exec()
312+
.run()
313313
.unwrap();
314314

315315
let err =
@@ -337,10 +337,10 @@ mod tests {
337337
);
338338
temp.child("Scarb.toml").write_str(content).unwrap();
339339

340-
let scarb_metadata = MetadataCommand::new()
340+
let scarb_metadata = ScarbCommand::metadata()
341341
.inherit_stderr()
342342
.current_dir(temp.path())
343-
.exec()
343+
.run()
344344
.unwrap();
345345

346346
let err =

crates/forge/src/shared_cache.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pub const PREV_TESTS_FAILED: &str = ".prev_tests_failed";
44
use anyhow::{Ok, Result};
55
use camino::Utf8PathBuf;
66
use forge_runner::test_case_summary::AnyTestCaseSummary;
7-
use scarb_metadata::MetadataCommand;
7+
use scarb_api::{metadata::MetadataCommandExt, ScarbCommand};
88
use std::fs::{self, File};
99
use std::io::{BufRead, BufReader, BufWriter, Write};
1010

@@ -47,7 +47,7 @@ pub fn set_cached_failed_tests_names(
4747
}
4848

4949
pub fn clean_cache() -> Result<()> {
50-
let scarb_metadata = MetadataCommand::new().inherit_stderr().exec()?;
50+
let scarb_metadata = ScarbCommand::metadata().inherit_stderr().run()?;
5151
let workspace_root = scarb_metadata.workspace.root.clone();
5252
let cache_dir = workspace_root.join(CACHE_DIR);
5353
if cache_dir.exists() {

crates/forge/test_utils/src/runner.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use assert_fs::TempDir;
44
use camino::Utf8PathBuf;
55
use forge_runner::test_crate_summary::TestCrateSummary;
66
use indoc::formatdoc;
7-
use scarb_api::{get_contracts_map, StarknetContractArtifacts};
8-
use scarb_metadata::MetadataCommand;
7+
use scarb_api::{
8+
get_contracts_map, metadata::MetadataCommandExt, ScarbCommand, StarknetContractArtifacts,
9+
};
910
use std::collections::HashMap;
1011
use std::fs;
1112
use std::path::{Path, PathBuf};
@@ -76,10 +77,10 @@ impl Contract {
7677
bail!("scarb build did not succeed")
7778
}
7879

79-
let scarb_metadata = MetadataCommand::new()
80+
let scarb_metadata = ScarbCommand::metadata()
8081
.current_dir(dir.path())
8182
.inherit_stderr()
82-
.exec()?;
83+
.run()?;
8384
let package = scarb_metadata
8485
.packages
8586
.iter()

crates/scarb-api/src/command.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use crate::metadata::MetadataCommand;
2+
use crate::version::VersionCommand;
13
use anyhow::Context;
24
use scarb_ui::args::PackagesFilter;
35
use std::collections::HashMap;
@@ -51,6 +53,18 @@ impl ScarbCommand {
5153
cmd
5254
}
5355

56+
/// Creates [`MetadataCommand`] command
57+
#[must_use]
58+
pub fn metadata() -> MetadataCommand {
59+
MetadataCommand::new()
60+
}
61+
62+
/// Creates [`VersionCommand`] command
63+
#[must_use]
64+
pub fn version() -> VersionCommand {
65+
VersionCommand
66+
}
67+
5468
/// Ensures that `scarb` binary is available in the system.
5569
pub fn ensure_available(&self) -> anyhow::Result<()> {
5670
which::which(self.binary_path())

crates/scarb-api/src/lib.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pub use command::*;
1111
use sierra_casm::compile;
1212

1313
mod command;
14+
pub mod metadata;
1415
pub mod version;
1516

1617
#[derive(Deserialize, Debug, PartialEq, Clone)]
@@ -214,12 +215,12 @@ pub fn package_matches_version_requirement(
214215
#[cfg(test)]
215216
mod tests {
216217
use super::*;
218+
use crate::metadata::MetadataCommandExt;
217219
use assert_fs::fixture::{FileWriteStr, PathChild, PathCopy};
218220
use assert_fs::prelude::FileTouch;
219221
use assert_fs::TempDir;
220222
use camino::Utf8PathBuf;
221223
use indoc::{formatdoc, indoc};
222-
use scarb_metadata::MetadataCommand;
223224
use std::str::FromStr;
224225

225226
fn setup_package(package_name: &str) -> TempDir {
@@ -321,10 +322,10 @@ mod tests {
321322
))
322323
.unwrap();
323324

324-
let scarb_metadata = MetadataCommand::new()
325+
let scarb_metadata = ScarbCommand::metadata()
325326
.inherit_stderr()
326327
.current_dir(temp.path())
327-
.exec()
328+
.run()
328329
.unwrap();
329330

330331
assert!(package_matches_version_requirement(
@@ -485,10 +486,10 @@ mod tests {
485486
.run()
486487
.unwrap();
487488

488-
let metadata = MetadataCommand::new()
489+
let metadata = ScarbCommand::metadata()
489490
.inherit_stderr()
490491
.manifest_path(temp.join("Scarb.toml"))
491-
.exec()
492+
.run()
492493
.unwrap();
493494

494495
let package = metadata.packages.first().unwrap();
@@ -524,10 +525,10 @@ mod tests {
524525
#[test]
525526
fn get_name_for_package() {
526527
let temp = setup_package("basic_package");
527-
let scarb_metadata = MetadataCommand::new()
528+
let scarb_metadata = ScarbCommand::metadata()
528529
.inherit_stderr()
529530
.current_dir(temp.path())
530-
.exec()
531+
.run()
531532
.unwrap();
532533

533534
let package_name =
@@ -539,10 +540,10 @@ mod tests {
539540
#[test]
540541
fn get_target_name_for_package() {
541542
let temp = setup_package("basic_package");
542-
let scarb_metadata = MetadataCommand::new()
543+
let scarb_metadata = ScarbCommand::metadata()
543544
.inherit_stderr()
544545
.current_dir(temp.path())
545-
.exec()
546+
.run()
546547
.unwrap();
547548

548549
let target_name =

crates/scarb-api/src/metadata.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
pub use scarb_metadata::{Metadata, MetadataCommand, MetadataCommandError, PackageMetadata};
2+
3+
pub trait MetadataCommandExt {
4+
fn run(&mut self) -> Result<Metadata, MetadataCommandError>;
5+
}
6+
7+
impl MetadataCommandExt for MetadataCommand {
8+
fn run(&mut self) -> Result<Metadata, MetadataCommandError> {
9+
// logic will go here
10+
// keep it now this way to don't rename method calls later
11+
self.exec()
12+
}
13+
}

0 commit comments

Comments
 (0)