publish-cool-workspace 0.13.5

Cargo subcommand for releasing crates in workspaces.
Documentation
use std::{io, path::Path, process::Command};

use crate::utils::Program;

pub struct Support {
    bat: Program,
}

impl Default for Support {
    fn default() -> Self {
        Self::new()
    }
}

impl Support {
    pub fn new() -> Self {
        Support {
            bat: Program::named("bat"),
        }
    }

    pub fn display_to_tty(
        &self,
        path: &Path,
        path_for_title: &Path,
        additional_title: impl AsRef<str>,
    ) -> io::Result<()> {
        if !self.bat.found {
            log::warn!(
                "Would want to use 'bat' for colored preview of '{}', but it wasn't available in the PATH.",
                path.display()
            );
            return Ok(());
        }
        if Command::new("bat")
            .args(&["--paging=always", "-l=md", "--file-name"])
            .arg(format!("{} ({})", path_for_title.display(), additional_title.as_ref()))
            .arg(path)
            .status()?
            .success()
        {
            Ok(())
        } else {
            Err(io::Error::new(io::ErrorKind::Other, "bat exited with an error"))
        }
    }
}