From: "Kristoffer Haugsbakk" <code@khaugsbakk.name>
To: "Josh Soref" <gitgitgadget@gmail.com>, git@vger.kernel.org
Cc: "Abhijeetsingh Meena" <abhijeetsingh.github@gmail.com>,
"Abhijeetsingh Meena" <abhijeet040403@gmail.com>
Subject: Re: [PATCH] blame: respect .git-blame-ignore-revs automatically
Date: Tue, 08 Oct 2024 11:07:40 +0200 [thread overview]
Message-ID: <dc01d9b3-d5fd-451f-8ce4-411f3a9b4b22@app.fastmail.com> (raw)
In-Reply-To: <pull.1809.git.1728370892696.gitgitgadget@gmail.com>
Thank you for working on this. I think an ability to respect a
conventional ignore list would be useful.
I was a bit concerned that there doesn’t seem to be something to turn
off ignore lists. The man page says that the discussed option exists
but not some `--no` variant. But then I tested this:
```
git blame --ignore-revs-file=README.md \
--no-ignore-revs-file README.md
```
And that works without giving errors. So it’s there. Just apparently
undocumented?
My assumption then is that, with this change, I could use
`--no-ignore-revs-file` to turn off the default file.
(One can also use the config `blame.ignoreRevsFile` set to the
empty string)
On Tue, Oct 8, 2024, at 09:01, Abhijeetsingh Meena via GitGitGadget wrote:
> 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.
Nice.
> 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.
(They can also use the `blame.ignoreRevsFile` config in order to not
have to give the option every time)
The project convention is to use the present tense for describing the
current behavior (without this patch). Like:
Users that have a standard list of commits to ignore have to use
`--ignore-revs-file`.
This style often lends itself to this structure:
- (optionally introduce the wider topic)
- Describe the current behavior and why that is a problem
- Say how we’re changing the code (which you already did a good job of in
your first paragraph).
It might end up something like this:
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.
> 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.
The issue that is referred:
https://github.com/gitgitgadget/git/issues/1494
That issue tracker is unofficial by the way.
>
>
> 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.
It’s nice that you mention specific projects that use this convention.
Sometimes people just say “this is used by many people/projects”. But
not what projects. (Then perhaps it is eventually revealed that “we use
it so therefore it is important” ;) )
> 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
There should be a final newline. ;)
>
> base-commit: 777489f9e09c8d0dd6b12f9d90de6376330577a2
> --
> gitgitgadget
next prev parent reply other threads:[~2024-10-08 9:08 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-08 7:01 [PATCH] blame: respect .git-blame-ignore-revs automatically Abhijeetsingh Meena via GitGitGadget
2024-10-08 9:07 ` Kristoffer Haugsbakk [this message]
2024-10-08 9:51 ` Phillip Wood
[not found] ` <pull.1809.v2.git.1728397437637.gitgitgadget@gmail.com>
[not found] ` <CAAirc3j2MfLyiNVnseRmTsDDu6R4gkcms1GXk=9_jAVLvEYaUg@mail.gmail.com>
[not found] ` <CAAirc3gX=PBixcyR0NRyRDnrydkeeu8A9or90c8MSUdHQ6uo=w@mail.gmail.com>
2024-10-08 16:12 ` [PREVIEW v2] " Abhijeetsingh Meena
2024-10-08 16:12 ` Abhijeetsingh Meena
2024-10-12 4:37 ` [PATCH v2 0/2] " Abhijeetsingh Meena via GitGitGadget
2024-10-12 4:37 ` [PATCH v2 1/2] " Abhijeetsingh Meena via GitGitGadget
2024-10-12 6:07 ` Eric Sunshine
2024-10-12 6:43 ` Eric Sunshine
2024-10-14 21:08 ` Taylor Blau
2024-10-16 6:04 ` Abhijeetsingh Meena
2024-10-12 13:58 ` Kristoffer Haugsbakk
2024-10-13 15:25 ` Phillip Wood
2024-10-14 21:00 ` Kristoffer Haugsbakk
2024-10-16 6:06 ` Abhijeetsingh Meena
2024-10-13 15:18 ` Phillip Wood
2024-10-16 6:07 ` Abhijeetsingh Meena
2024-10-22 6:49 ` Abhijeetsingh Meena
2024-10-22 7:54 ` Eric Sunshine
2024-10-12 4:37 ` [PATCH v2 2/2] blame: introduce --override-ignore-revs to bypass ignore revisions list Abhijeetsingh Meena via GitGitGadget
2024-10-12 6:24 ` Eric Sunshine
2024-10-12 6:26 ` Eric Sunshine
2024-10-12 14:25 ` Kristoffer Haugsbakk
2024-10-13 15:20 ` Phillip Wood
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=dc01d9b3-d5fd-451f-8ce4-411f3a9b4b22@app.fastmail.com \
--to=code@khaugsbakk.name \
--cc=abhijeet040403@gmail.com \
--cc=abhijeetsingh.github@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).