eqlog 0.5.2

Datalog with equality
Documentation
use sha2::{Digest, Sha256};

#[cfg(feature = "rebuild")]
fn digest_source() -> String {
    use std::process::Command;

    let git_rev_parse_head_output = Command::new("git")
        .args(["rev-parse", "HEAD"])
        .output()
        .unwrap();
    assert!(git_rev_parse_head_output.status.success());

    let git_diff_output = Command::new("git").args(["diff"]).output().unwrap();
    assert!(git_diff_output.status.success());

    let binary_digest = Sha256::new()
        .chain_update(&git_rev_parse_head_output.stdout)
        .chain_update(&git_diff_output.stdout)
        .finalize();
    base16ct::upper::encode_string(&binary_digest)
}

#[cfg(not(feature = "rebuild"))]
fn digest_source() -> String {
    use std::env;

    let version = env::var("CARGO_PKG_VERSION").unwrap();
    let binary_digest = Sha256::digest(version.as_bytes());
    base16ct::upper::encode_string(&binary_digest)
}

fn main() {
    lalrpop::process_root().unwrap();
    println!("cargo:rustc-env=EQLOG_SOURCE_DIGEST={}", digest_source());
}