odometer 0.6.1

A workspace version management tool that keeps package versions synchronized across projects
Documentation
use std::{
    path::{Path, PathBuf},
    process::Command,
};

pub fn build_fixture_path(fixture_name: &str) -> PathBuf {
    Path::new(env!("CARGO_MANIFEST_DIR"))
        .join("tests/fixtures")
        .join(fixture_name)
}

pub fn run_make(args: &[&str]) {
    let cwd = Path::new(env!("CARGO_MANIFEST_DIR"));

    Command::new("make")
        .args(args)
        .current_dir(cwd)
        .output()
        .expect("Failed to run make command");
}

pub fn run_odo(args: &[&str], cwd: &Path) -> (bool, Vec<String>, Vec<String>) {
    let default_odo_binary = Path::new(env!("CARGO_MANIFEST_DIR")).join("target/debug/odo");

    let odo_binary = std::env::var("ODO_BINARY").unwrap_or_else(|_| {
        run_make(&["build"]);
        default_odo_binary.to_string_lossy().to_string()
    });

    let output = Command::new(odo_binary)
        .args(args)
        .current_dir(cwd)
        .output()
        .expect("Failed to run odo command");

    let success = output.status.success();
    let stdout = String::from_utf8_lossy(&output.stdout).trim().to_string();
    let stderr = String::from_utf8_lossy(&output.stderr).trim().to_string();

    (
        success,
        stdout.split("\n").map(String::from).collect(),
        stderr.split("\n").map(String::from).collect(),
    )
}