rpo 0.1.0-beta.5

Git contribution analysis: commits, file changes, and per-line authorship over time as polars DataFrames
mod helpers;

use helpers::RepoFixture;
use rpo::RepoAnalyzer;

#[test]
fn linguist_generated_excluded_from_blame_by_default() {
    let f = RepoFixture::new();
    f.write(".gitattributes", "gen/** linguist-generated=true\n");
    f.write("src/main.rs", "fn main() {}\n");
    f.write("gen/out.pb.go", "// generated\n");
    f.commit("A", "a@a.com", "initial");

    let a = RepoAnalyzer::open(f.path()).unwrap().all().unwrap();

    let fc = &a.file_changes;
    let paths: Vec<&str> = fc
        .column("path")
        .unwrap()
        .str()
        .unwrap()
        .iter()
        .filter_map(|x| x)
        .collect();
    assert!(paths.contains(&"gen/out.pb.go"));
    let is_gen: Vec<bool> = fc
        .column("is_generated")
        .unwrap()
        .bool()
        .unwrap()
        .iter()
        .filter_map(|x| x)
        .collect();
    assert!(is_gen.iter().any(|&x| x));

    // Blame should not include the generated file.
    let blame = a.blame.unwrap();
    let blame_paths: Vec<&str> = blame
        .column("path")
        .unwrap()
        .str()
        .unwrap()
        .iter()
        .filter_map(|x| x)
        .collect();
    assert!(!blame_paths.contains(&"gen/out.pb.go"));
    assert!(blame_paths.contains(&"src/main.rs"));
}