stax 0.96.6

Fast stacked Git branches and PRs
Documentation
use crate::engine::BranchMetadata;
use crate::git::GitRepo;
use anyhow::{Context, Result};
use colored::Colorize;

pub fn run(branch: Option<String>, frozen: bool) -> Result<()> {
    let repo = GitRepo::open()?;
    let branch = branch.unwrap_or(repo.current_branch()?);
    let mut metadata = BranchMetadata::read(repo.inner(), &branch)?
        .with_context(|| format!("'{branch}' is not a tracked branch"))?;

    if metadata.frozen == frozen {
        println!(
            "Branch '{}' is already {}.",
            branch.cyan(),
            if frozen { "frozen" } else { "unfrozen" }
        );
        return Ok(());
    }

    metadata.frozen = frozen;
    metadata.write(repo.inner(), &branch)?;
    println!(
        "{} Branch '{}' {}.",
        "".green(),
        branch.cyan(),
        if frozen { "frozen" } else { "unfrozen" }
    );
    Ok(())
}