#parser #blame #path #git-blame-parser #author-mail

git-blame-parser

Parses the git blame porcelain format into a struct

2 releases

Uses new Rust 2024

new 0.1.1 Apr 22, 2025
0.1.0 Apr 22, 2025

#762 in Filesystem

Download history 75/week @ 2025-04-16

75 downloads per month
Used in git-blame-pr

MIT license

12KB
172 lines

git-blame-parser

Badge Workflow

Parses the output of git blame command in the porcelain format into a struct. the output must be generated using the --line-porcelain option.

Usage

Run the following Cargo command in your project directory:

% cargo add git-blame-parser

Or add the following line to your Cargo.toml:

[dependencies]
git-blame-parser = "0.1.1"

Then:

let output = std::process::Command::new("git")
    .args(["blame", "--line-porcelain"])
    .arg(filepath)
    .output()
    .unwrap();

if output.status.success() {
    let raw_blame = String::from_utf8_lossy(&output.stdout);
    let blames = match git_blame_parser::parse(&raw_blame) {
        Ok(blames) => blames,
        Err(e) => {
            eprintln!("Error: {e}");
            std::process::exit(1);
        }
    };

    for blame in blames.iter() {
        println!(
            "* {}: {:0>4} by {} {}",
            blame.short_commit(),
            blame.original_line_no,
            blame.author,
            blame.author_mail
        );
        println!("summary: {}", blame.summary);
        println!("content: `{}`", blame.content);
        println!();
    }
}

See also examples.

License

MIT

No runtime deps