rsmultigit 0.1.16

Manage multiple git repositories at once
use crate::common::{run_rsmultigit, setup_git_repos, stderr_str};

#[test]
fn run_executes_command_across_all_repos() {
    let tmp = setup_git_repos(&["repo1", "repo2"]);
    let output = run_rsmultigit(tmp.path(), &["run", "touch", "marker.txt"]);
    assert!(
        output.status.success(),
        "run command should succeed: {}",
        stderr_str(&output)
    );

    assert!(tmp.path().join("repo1/marker.txt").exists());
    assert!(tmp.path().join("repo2/marker.txt").exists());
}

#[test]
fn run_executes_single_string_shell_command() {
    let tmp = setup_git_repos(&["repo1", "repo2"]);
    let output = run_rsmultigit(tmp.path(), &["run", "echo hello > greeting.txt"]);
    assert!(
        output.status.success(),
        "run command should succeed: {}",
        stderr_str(&output)
    );

    assert!(tmp.path().join("repo1/greeting.txt").exists());
    assert!(tmp.path().join("repo2/greeting.txt").exists());
    assert_eq!(
        std::fs::read_to_string(tmp.path().join("repo1/greeting.txt"))
            .unwrap()
            .trim(),
        "hello"
    );
}

#[test]
fn run_exec_alias_works() {
    let tmp = setup_git_repos(&["repo1", "repo2"]);
    let output = run_rsmultigit(tmp.path(), &["exec", "touch", "alias_marker.txt"]);
    assert!(
        output.status.success(),
        "exec command should succeed: {}",
        stderr_str(&output)
    );

    assert!(tmp.path().join("repo1/alias_marker.txt").exists());
    assert!(tmp.path().join("repo2/alias_marker.txt").exists());
}

#[test]
fn run_failing_command_stops_by_default() {
    let tmp = setup_git_repos(&["repo1", "repo2"]);
    let output = run_rsmultigit(tmp.path(), &["run", "false"]);
    assert!(!output.status.success());
}

#[test]
fn run_failing_command_continues_with_no_stop() {
    let tmp = setup_git_repos(&["repo1", "repo2"]);
    let output = run_rsmultigit(tmp.path(), &["--no-stop", "run", "false"]);
    assert!(output.status.success());
}