cargo-rbmt 0.4.1

Maintainer tools for rust-bitcoin projects
use xshell::Shell;

use crate::environment::get_workspace_packages;

pub fn run(sh: &Shell, packages: &[String]) -> Result<(), Box<dyn std::error::Error>> {
    for package in get_workspace_packages(sh, packages)? {
        sh.change_dir(&package.dir);
        if !sh.path_exists("generate-files.sh") {
            return Err(format!("Unable to generate files for {}. The script at {}/generate-files.sh doesn't exist. ", package.name, package.dir.display()).into());
        }

        let cmd = rbmt_cmd!(sh, "./generate-files.sh");
        let _ = cmd.run();

        let output = rbmt_cmd!(sh, "git diff --name-only").read()?;
        let changed: Vec<String> = output.lines().map(String::from).collect();
        if !changed.is_empty() {
            return Err(format!(
                "You have introduced changes that have resulted in changes to the following generated files:\n {}\nPlease resolve the diff in your working directory",
                changed.join("\n")).into());
        }
    }

    Ok(())
}