//! `mock-render lock --project --section [--screenshot ]` //! //! Extracted from `main.rs` in v0.14.1 per Constructor Pattern. use crate::cli_args::{flag, require_project_section}; use crate::hash; use crate::state::{Section, SiteState}; use std::process::ExitCode; pub fn run(args: &[String]) -> ExitCode { let (project, section) = match require_project_section(args) { Ok(v) => v, Err(e) => { eprintln!("lock: {e}"); return ExitCode::from(1); } }; let screenshot = flag(args, "--screenshot"); let Ok(hash_now) = hash::hash_file(§ion) else { eprintln!("lock: cannot hash {}", section.display()); return ExitCode::from(2); }; let mut st = match SiteState::load(&project) { Ok(s) => s, Err(e) => { eprintln!("lock: {e}"); return ExitCode::from(2); } }; let key = SiteState::key_for(§ion); st.sections.insert( key.clone(), Section { path: section.display().to_string(), sha256: hash_now.clone(), locked: true, screenshot: screenshot.map(String::from), }, ); if let Err(e) = st.save(&project) { eprintln!("lock: {e}"); return ExitCode::from(2); } println!("locked {key} ({})", &hash_now[..12]); ExitCode::SUCCESS }