diff options
author | Joseph Hale <me@jhale.dev> | 2022-08-29 23:45:51 -0700 |
---|---|---|
committer | Joseph Hale <me@jhale.dev> | 2022-08-30 22:04:34 -0700 |
commit | 18a79d8028f934f8f78da33de3b0523fc7d1df47 (patch) | |
tree | 087efdcdb3fc02be8a4bdd77e5dc6880c3170e6a /test/test_repo.py | |
parent | 73bde1f27711e48bd887b5a13cd5e3a0a8d9d723 (diff) | |
download | gitpython-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.py | 7 |
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 |