git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] blame: respect .git-blame-ignore-revs automatically

From
PWPhillip 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
Previous: Kristoffer HaugsbakkNext: Abhijeetsingh Meena via GitGitGadget
Message 3 of 24 in “blame: respect .git-blame-ignore-revs automatically”
  1. blame: respect .git-blame-ignore-revs automaticallyAbhijeetsingh Meena via GitGitGadget, Oct 8, 2024
  2. Kristoffer HaugsbakkOct 8, 2024
  3. Phillip WoodOct 8, 2024
  4. 0/2 blame: respect .git-blame-ignore-revs automaticallyAbhijeetsingh Meena via GitGitGadget, Oct 12, 2024
  5. 1/2 blame: respect .git-blame-ignore-revs automaticallyAbhijeetsingh Meena via GitGitGadget, Oct 12, 2024
  6. Eric SunshineOct 12, 2024
  7. Eric SunshineOct 12, 2024
  8. Taylor BlauOct 14, 2024
  9. Abhijeetsingh MeenaOct 16, 2024
  10. Kristoffer HaugsbakkOct 12, 2024
  11. Phillip WoodOct 13, 2024
  12. Kristoffer HaugsbakkOct 14, 2024
  13. Abhijeetsingh MeenaOct 16, 2024
  14. Phillip WoodOct 13, 2024
  15. Abhijeetsingh MeenaOct 16, 2024
  16. Abhijeetsingh MeenaOct 22, 2024
  17. Eric SunshineOct 22, 2024
  18. 2/2 blame: introduce --override-ignore-revs to bypass ignore revisions listAbhijeetsingh Meena via GitGitGadget, Oct 12, 2024
  19. Eric SunshineOct 12, 2024
  20. Eric SunshineOct 12, 2024
  21. Kristoffer HaugsbakkOct 12, 2024
  22. Phillip WoodOct 13, 2024
  23. Abhijeetsingh MeenaOct 8, 2024
  24. Abhijeetsingh MeenaOct 8, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.