diff --git a/AUTHORS b/AUTHORS index 97e147892..8f3f2ccfe 100644 --- a/AUTHORS +++ b/AUTHORS @@ -49,4 +49,5 @@ Contributors are: -Julien Mauroy <pro.julien.mauroy _at_ gmail.com> -Patrick Gerard -Luke Twist <itsluketwist@gmail.com> +-Joseph Hale <me _at_ jhale.dev> Portions derived from other open source works and are clearly marked. diff --git a/git/repo/base.py b/git/repo/base.py index a1be5ff9a..c49c61184 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -950,7 +950,12 @@ def blame_incremental(self, rev: str | HEAD, file: str, **kwargs: Any) -> Iterat ) def blame( - self, rev: Union[str, HEAD], file: str, incremental: bool = False, **kwargs: Any + self, + rev: Union[str, HEAD], + file: str, + incremental: bool = False, + rev_opts: Optional[List[str]] = None, + **kwargs: Any ) -> List[List[Commit | List[str | bytes] | None]] | Iterator[BlameEntry] | None: """The blame information for the given file at the given revision. @@ -962,8 +967,8 @@ def blame( of appearance.""" if incremental: return self.blame_incremental(rev, file, **kwargs) - - data: bytes = self.git.blame(rev, "--", file, p=True, stdout_as_string=False, **kwargs) + rev_opts = rev_opts or [] + data: bytes = self.git.blame(rev, *rev_opts, "--", file, p=True, stdout_as_string=False, **kwargs) commits: Dict[str, Commit] = {} blames: List[List[Commit | List[str | bytes] | None]] = [] diff --git a/test/test_repo.py b/test/test_repo.py index 75b590fe7..703dbb438 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -553,6 +553,13 @@ def test_blame_complex_revision(self, git): self.assertEqual(len(res), 1) self.assertEqual(len(res[0][1]), 83, "Unexpected amount of parsed blame lines") + @mock.patch.object(Git, "_call_process") + def test_blame_accepts_rev_opts(self, git): + res = self.rorepo.blame("HEAD", "README.md", rev_opts=["-M", "-C", "-C"]) + expected_args = ['blame', 'HEAD', '-M', '-C', '-C', '--', 'README.md'] + boilerplate_kwargs = {"p" : True, "stdout_as_string": False} + git.assert_called_once_with(*expected_args, **boilerplate_kwargs) + @skipIf( HIDE_WINDOWS_KNOWN_ERRORS and Git.is_cygwin(), """FIXME: File "C:\\projects\\gitpython\\git\\cmd.py", line 671, in execute