flowey_lib_hvlite/
init_openvmm_cargo_config_deny_warnings.rs1use flowey::node::prelude::*;
7
8flowey_request! {
9 pub enum Request {
10 DenyWarnings(bool),
11 Done(WriteVar<SideEffect>),
12 }
13}
14
15new_flow_node!(struct Node);
16
17impl FlowNode for Node {
18 type Request = Request;
19
20 fn imports(ctx: &mut ImportCtx<'_>) {
21 ctx.import::<crate::git_checkout_openvmm_repo::Node>();
22 }
23
24 fn emit(requests: Vec<Self::Request>, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
25 let mut done = Vec::new();
26 let mut deny_warnings = None;
27
28 for req in requests {
29 match req {
30 Request::Done(v) => done.push(v),
31 Request::DenyWarnings(v) => {
32 same_across_all_reqs("DenyWarnings", &mut deny_warnings, v)?
33 }
34 }
35 }
36
37 let deny_warnings =
38 deny_warnings.ok_or(anyhow::anyhow!("Missing essential request: DenyWarnings"))?;
39
40 if done.is_empty() {
43 return Ok(());
44 }
45
46 if !deny_warnings {
47 ctx.emit_side_effect_step([], done);
48 return Ok(());
49 }
50
51 let openvmm_repo_path = ctx.reqv(crate::git_checkout_openvmm_repo::req::GetRepoDir);
52
53 ctx.emit_rust_step("set '-Dwarnings' in .cargo/config.toml", move |ctx| {
54 done.claim(ctx);
55 let openvmm_repo_path = openvmm_repo_path.claim(ctx);
56 move |rt| {
57 let path = rt.read(openvmm_repo_path).join(".cargo/config.toml");
58 let data = fs_err::read_to_string(&path)?;
59 let data = data.replace("### ENABLE_IN_CI", "");
60 fs_err::write(path, data)?;
61 Ok(())
62 }
63 });
64
65 Ok(())
66 }
67}