veryl 0.20.0

A modern hardware description language
use crate::OptUpdate;
use miette::Result;
use veryl_metadata::{Lockfile, Metadata};

pub struct CmdUpdate {
    _opt: OptUpdate,
}

impl CmdUpdate {
    pub fn new(opt: OptUpdate) -> Self {
        Self { _opt: opt }
    }

    pub fn exec(&self, metadata: &mut Metadata) -> Result<bool> {
        if metadata.lockfile_path.exists() {
            let mut lockfile = Lockfile::load(metadata)?;
            let modified = lockfile.update(metadata, true)?;
            if modified {
                lockfile.save(&metadata.lockfile_path)?;
            }
        } else {
            let mut lockfile = Lockfile::new(metadata)?;
            lockfile.save(&metadata.lockfile_path)?;
        }

        Ok(true)
    }
}