summaryrefslogtreecommitdiff
path: root/test/test_repo.py
diff options
context:
space:
mode:
authorJoseph Hale <me@jhale.dev>2022-08-29 23:45:51 -0700
committerJoseph Hale <me@jhale.dev>2022-08-30 22:04:34 -0700
commit18a79d8028f934f8f78da33de3b0523fc7d1df47 (patch)
tree087efdcdb3fc02be8a4bdd77e5dc6880c3170e6a /test/test_repo.py
parent73bde1f27711e48bd887b5a13cd5e3a0a8d9d723 (diff)
downloadgitpython-18a79d8028f934f8f78da33de3b0523fc7d1df47.tar.gz
feat(blame): Support custom `rev_opts` for blame
The `git blame` CLI offers a repeated `-C` option that can be used to detect lines that move within/between files. While a slower operation, it yields more accurate authorship reports. https://git-scm.com/docs/git-blame#Documentation/git-blame.txt--Cltnumgt While GitPython does enable passing custom kwargs to the command line `git` invocation, the fact that kwargs is a dictionary (i.e. no duplicate keys) means that there was no way to request the `-C` option in `git blame` more than once. This commit adds an optional `rev_opts` parameter to the `blame` method which accepts a list of strings to propagate to the CLI invocation of `git blame`. By using a `List[str]` for `rev_opts`, users of GitPython can pass now the `-C` option multiple times to get more detailed authorship reports from `git blame`.
Diffstat (limited to 'test/test_repo.py')
-rw-r--r--test/test_repo.py7
1 files changed, 7 insertions, 0 deletions
diff --git a/test/test_repo.py b/test/test_repo.py
index 75b590fe..703dbb43 100644
--- a/test/test_repo.py
+++ b/test/test_repo.py
@@ -553,6 +553,13 @@ class TestRepo(TestBase):
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