polaranges 0.3.2

Rust-first genomic range operations on top of Polars DataFrames
Documentation
use std::process::Command;

fn main() {
    println!("cargo:rerun-if-changed=.git/HEAD");
    println!("cargo:rerun-if-changed=.git/index");
    println!("cargo:rerun-if-env-changed=POLARANGES_BENCH_VERSION_DESCRIPTION");

    let git_description = git_output(&["log", "-1", "--format=%h %s"])
        .unwrap_or_else(|| "unknown git revision".to_string());
    let dirty = git_output(&["status", "--short"])
        .map(|value| !value.trim().is_empty())
        .unwrap_or(false);

    println!("cargo:rustc-env=POLARANGES_BUILD_GIT_DESCRIPTION={git_description}");
    println!(
        "cargo:rustc-env=POLARANGES_BUILD_GIT_DIRTY={}",
        if dirty { "dirty" } else { "clean" }
    );
}

fn git_output(args: &[&str]) -> Option<String> {
    let output = Command::new("git").args(args).output().ok()?;

    if !output.status.success() {
        return None;
    }

    Some(String::from_utf8(output.stdout).ok()?.trim().to_string())
}