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 /git/repo/base.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 'git/repo/base.py')
-rw-r--r-- | git/repo/base.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/git/repo/base.py b/git/repo/base.py index a1be5ff9..c49c6118 100644 --- a/git/repo/base.py +++ b/git/repo/base.py @@ -950,7 +950,12 @@ class Repo(object): ) 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 @@ class Repo(object): 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]] = [] |