Re: [PATCH] blame: respect .git-blame-ignore-revs automatically
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Oct 8, 2024, 09:51 UTC
- Message-ID
- <8d27ea8e-4562-4fcc-a7b3-399abc42135b@gmail.com>
- In-Reply-To
- <pull.1809.git.1728370892696.gitgitgadget@gmail.com>
Hi Abhijeetsingh
On 08/10/2024 08:01, Abhijeetsingh Meena via GitGitGadget wrote:
Show 11 quoted lines
> From: Abhijeetsingh Meena <abhijeet040403@gmail.com> > > Modify `git blame` to automatically respect a `.git-blame-ignore-revs` > file if it exists in the repository. This file is used by many projects > to ignore non-functional changes, such as reformatting or large-scale > refactoring, when generating blame information. > > Before this change, users had to manually specify the file with the > `--ignore-revs-file` option. This update streamlines the process by > automatically detecting the `.git-blame-ignore-revs` file, reducing > manual effort.
As Kristoffer mentioned there is a config option so that the user does not have to specify the file each time. The decision not to support a default file for this feature was deliberate [1,2]. It is possible that we now have enough experience with the feature that we think it would be a good idea but any such change would need to address the concerns about ignoring "cleanup" commits that introduce bugs. If we do decide to support a default file we'd need to work out how it interacted with the config setting and make sure there was an easy way to turn the feature off.
Best Wishes
Phillip
[1] https://lore.kernel.org/git/c34159af-f97e-82b3-e2a1-04adae5c10ac@google.com/ [2] https://lore.kernel.org/git/YLfe+HXl4hkzs44b@nand.local/
Show 116 quoted lines
> This change aligns with the standardized practice in many repositories
> and simplifies the workflow for users.
>
> Signed-off-by: Abhijeetsingh Meena <abhijeet040403@gmail.com>
> ---
> blame: respect .git-blame-ignore-revs automatically
>
>
> Introduction
> ============
>
> Hi, I'm Abhijeet (Ethan0456), and this is my first contribution to the
> Git project. I currently work as an ML Engineer at an early-stage
> startup, and I’m excited to contribute to this open-source project.
>
>
> Why the Change?
> ===============
>
> I came across this enhancement request on the bug tracker and found it
> beginner-friendly, making it a great opportunity for me to get familiar
> with the Git codebase. The ability for git blame to automatically
> respect the .git-blame-ignore-revs file is something that can streamline
> workflows for many users, and I felt it would be a valuable addition.
>
>
> Feedback
> ========
>
> While I’m confident in the changes made to builtin/blame.c and the new
> test case in t/t8015-blame-ignore-revs.sh, I welcome any feedback or
> suggestions to improve both my code and approach. I’m eager to learn
> from the community and improve where needed.
>
>
> Community Need
> ==============
>
> There is precedent for this functionality in other projects:
>
> * Chromium
> [https://chromium.googlesource.com/chromium/src.git/+/f0596779e57f46fccb115a0fd65f0305894e3031/.git-blame-ignore-revs],
> which powers many popular browsers, uses .git-blame-ignore-revs to
> simplify the blame process by ignoring non-functional changes.
> * Rob Allen's blog post
> [https://akrabat.com/ignoring-revisions-with-git-blame/] discusses
> the need for ignoring revisions with git blame, and a commenter
> specifically suggests that it would be helpful if Git automatically
> respected .git-blame-ignore-revs.
>
> I hope this change aligns with community needs and improves the git
> blame experience for users.
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1809%2FEthan0456%2Fblame-auto-ignore-revs-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1809/Ethan0456/blame-auto-ignore-revs-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/1809
>
> builtin/blame.c | 8 ++++++++
> t/t8015-blame-default-ignore-revs.sh | 26 ++++++++++++++++++++++++++
> 2 files changed, 34 insertions(+)
> create mode 100755 t/t8015-blame-default-ignore-revs.sh
>
> diff --git a/builtin/blame.c b/builtin/blame.c
> index e407a22da3b..1eddabaf60f 100644
> --- a/builtin/blame.c
> +++ b/builtin/blame.c
> @@ -1105,6 +1105,14 @@ parse_done:
> 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;
> diff --git a/t/t8015-blame-default-ignore-revs.sh b/t/t8015-blame-default-ignore-revs.sh
> new file mode 100755
> index 00000000000..84e1a9e87e6
> --- /dev/null
> +++ b/t/t8015-blame-default-ignore-revs.sh
> @@ -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
> \ No newline at end of file
>
> base-commit: 777489f9e09c8d0dd6b12f9d90de6376330577a2