git-branchless-lib 0.10.0

Support library for git-branchless.
Documentation
use std::time::SystemTime;

use branchless::core::effects::Effects;
use branchless::core::eventlog::EventLogDb;
use branchless::core::formatting::Glyphs;
use branchless::git::WorkingCopyChangesType;
use branchless::testing::{make_git, GitRunOptions};

#[test]
fn test_has_conflicts() -> eyre::Result<()> {
    let git = make_git()?;
    git.init_repo()?;

    git.commit_file("test1", 1)?;
    git.commit_file("test2", 2)?;
    git.run(&["checkout", "HEAD^"])?;
    git.commit_file_with_contents("test2", 2, "conflicting contents")?;

    git.run_with_options(
        &["merge", "master"],
        &GitRunOptions {
            expected_exit_code: 1,
            ..Default::default()
        },
    )?;

    let glyphs = Glyphs::text();
    let effects = Effects::new_suppress_for_test(glyphs);
    let git_run_info = git.get_git_run_info();
    let repo = git.get_repo()?;
    let index = repo.get_index()?;
    let conn = repo.get_db_conn()?;
    let event_log_db = EventLogDb::new(&conn)?;
    let event_tx_id = event_log_db.make_transaction_id(SystemTime::now(), "testing")?;
    let head_info = repo.get_head_info()?;
    let (snapshot, status) = repo.get_status(
        &effects,
        &git_run_info,
        &index,
        &head_info,
        Some(event_tx_id),
    )?;
    insta::assert_debug_snapshot!(status, @r###"
        [
            StatusEntry {
                index_status: Unmerged,
                working_copy_status: Added,
                working_copy_file_mode: Blob,
                path: "test2.txt",
                orig_path: None,
            },
        ]
        "###);
    assert_eq!(
        snapshot.get_working_copy_changes_type()?,
        WorkingCopyChangesType::Conflicts
    );

    Ok(())
}