cargo_eval/ops/
mod.rs

1use crate::CargoResult;
2use crate::CliResult;
3
4pub fn run(
5    config: &cargo::Config,
6    manifest_path: &std::path::Path,
7    args: &[std::ffi::OsString],
8    release: bool,
9) -> CargoResult<()> {
10    let script = crate::util::script::RawScript::parse_from(manifest_path)?;
11    let ws = script.to_workspace(config)?;
12
13    let mut build_config = cargo::core::compiler::BuildConfig::new(
14        config,
15        None,
16        false,
17        &[],
18        cargo::core::compiler::CompileMode::Build,
19    )?;
20    build_config.requested_profile =
21        cargo::util::interning::InternedString::new(if release { "release" } else { "dev" });
22    let compile_opts = cargo::ops::CompileOptions {
23        build_config,
24        cli_features: cargo::core::resolver::features::CliFeatures::from_command_line(
25            &[],
26            false,
27            true,
28        )?,
29        spec: cargo::ops::Packages::Default,
30        filter: cargo::ops::CompileFilter::Default {
31            required_features_filterable: false,
32        },
33        target_rustdoc_args: None,
34        target_rustc_args: None,
35        target_rustc_crate_types: None,
36        rustdoc_document_private_items: false,
37        honor_rust_version: true,
38    };
39
40    cargo::ops::run(&ws, &compile_opts, args)
41}
42
43pub fn clean(config: &cargo::Config, manifest_path: &std::path::Path) -> CargoResult<()> {
44    let opts = cargo::ops::CleanOptions {
45        config,
46        spec: vec![],
47        targets: vec![],
48        requested_profile: cargo::util::interning::InternedString::new("dev"),
49        profile_specified: false,
50        doc: false,
51    };
52    let script = crate::util::script::RawScript::parse_from(manifest_path)?;
53    let ws = script.to_workspace(config)?;
54    cargo::ops::clean(&ws, &opts)?;
55    Ok(())
56}
57
58pub fn test(config: &cargo::Config, manifest_path: &std::path::Path) -> CliResult {
59    let script = crate::util::script::RawScript::parse_from(manifest_path)?;
60    let ws = script.to_workspace(config)?;
61
62    let mut build_config = cargo::core::compiler::BuildConfig::new(
63        config,
64        None,
65        false,
66        &[],
67        cargo::core::compiler::CompileMode::Test,
68    )?;
69    build_config.requested_profile = cargo::util::interning::InternedString::new("test");
70    let compile_opts = cargo::ops::CompileOptions {
71        build_config,
72        cli_features: cargo::core::resolver::features::CliFeatures::from_command_line(
73            &[],
74            false,
75            true,
76        )?,
77        spec: cargo::ops::Packages::Default,
78        filter: cargo::ops::CompileFilter::from_raw_arguments(
79            false,
80            vec![],
81            true,
82            vec![],
83            false,
84            vec![],
85            false,
86            vec![],
87            false,
88            false,
89        ),
90        target_rustdoc_args: None,
91        target_rustc_args: None,
92        target_rustc_crate_types: None,
93        rustdoc_document_private_items: false,
94        honor_rust_version: true,
95    };
96
97    let ops = cargo::ops::TestOptions {
98        no_run: false,
99        no_fail_fast: false,
100        compile_opts,
101    };
102
103    cargo::ops::run_tests(&ws, &ops, &[])
104}
105
106pub fn bench(config: &cargo::Config, manifest_path: &std::path::Path) -> CliResult {
107    let script = crate::util::script::RawScript::parse_from(manifest_path)?;
108    let ws = script.to_workspace(config)?;
109
110    let mut build_config = cargo::core::compiler::BuildConfig::new(
111        config,
112        None,
113        false,
114        &[],
115        cargo::core::compiler::CompileMode::Bench,
116    )?;
117    build_config.requested_profile = cargo::util::interning::InternedString::new("bench");
118    let compile_opts = cargo::ops::CompileOptions {
119        build_config,
120        cli_features: cargo::core::resolver::features::CliFeatures::from_command_line(
121            &[],
122            false,
123            true,
124        )?,
125        spec: cargo::ops::Packages::Default,
126        filter: cargo::ops::CompileFilter::from_raw_arguments(
127            false,
128            vec![],
129            true,
130            vec![],
131            false,
132            vec![],
133            false,
134            vec![],
135            false,
136            false,
137        ),
138        target_rustdoc_args: None,
139        target_rustc_args: None,
140        target_rustc_crate_types: None,
141        rustdoc_document_private_items: false,
142        honor_rust_version: true,
143    };
144
145    let ops = cargo::ops::TestOptions {
146        no_run: false,
147        no_fail_fast: false,
148        compile_opts,
149    };
150
151    cargo::ops::run_benches(&ws, &ops, &[])
152}