Skip to content

Commit

Permalink
blame: respect .git-blame-ignore-revs automatically
Browse files Browse the repository at this point in the history
git-blame(1) can ignore a list of commits with `--ignore-revs-file`.
This is useful for marking uninteresting commits like formatting
changes, refactors and whatever else should not be “blamed”.  Some
projects even version control this file so that all contributors can
use it; the conventional name is `.git-blame-ignore-revs`.

But each user still has to opt-in to the standard ignore list,
either with this option or with the config `blame.ignoreRevsFile`.
Let’s teach git-blame(1) to respect this conventional file in order
to streamline the process.

Signed-off-by: Abhijeetsingh Meena <[email protected]>
  • Loading branch information
Ethan0456 committed Oct 11, 2024
1 parent ef8ce8f commit 4ed930c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
8 changes: 8 additions & 0 deletions builtin/blame.c
Original file line number Diff line number Diff line change
Expand Up @@ -1105,6 +1105,14 @@ int cmd_blame(int argc,
add_pending_object(&revs, &head_commit->object, "HEAD");
}

/*
* By default, add .git-blame-ignore-revs to the list of files
* containing revisions to ignore if it exists.
*/
if (access(".git-blame-ignore-revs", F_OK) == 0) {
string_list_append(&ignore_revs_file_list, ".git-blame-ignore-revs");
}

init_scoreboard(&sb);
sb.revs = &revs;
sb.contents_from = contents_from;
Expand Down
26 changes: 26 additions & 0 deletions t/t8015-blame-default-ignore-revs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/sh

test_description='default revisions to ignore when blaming'

TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh

test_expect_success 'blame: default-ignore-revs-file' '
test_commit first-commit hello.txt hello &&
echo world >>hello.txt &&
test_commit second-commit hello.txt &&
sed "1s/hello/hi/" <hello.txt > hello.txt.tmp &&
mv hello.txt.tmp hello.txt &&
test_commit third-commit hello.txt &&
git rev-parse HEAD >ignored-file &&
git blame --ignore-revs-file=ignored-file hello.txt >expect &&
git rev-parse HEAD >.git-blame-ignore-revs &&
git blame hello.txt >actual &&
test_cmp expect actual
'

test_done

0 comments on commit 4ed930c

Please sign in to comment.