-
-
Notifications
You must be signed in to change notification settings - Fork 967
Add trailer support for commit creation #2116
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -570,6 +570,7 @@ def create_from_tree( | |||||||||
| committer: Union[None, Actor] = None, | ||||||||||
| author_date: Union[None, str, datetime.datetime] = None, | ||||||||||
| commit_date: Union[None, str, datetime.datetime] = None, | ||||||||||
| trailers: Union[None, Dict[str, str], List[Tuple[str, str]]] = None, | ||||||||||
| ) -> "Commit": | ||||||||||
| """Commit the given tree, creating a :class:`Commit` object. | ||||||||||
|
|
@@ -609,6 +610,14 @@ def create_from_tree( | |||||||||
| :param commit_date: | ||||||||||
| The timestamp for the committer field. | ||||||||||
| :param trailers: | ||||||||||
| Optional trailer key-value pairs to append to the commit message. | ||||||||||
| Can be a dictionary mapping trailer keys to values, or a list of | ||||||||||
| ``(key, value)`` tuples (useful when the same key appears multiple | ||||||||||
| times, e.g. multiple ``Signed-off-by`` trailers). Trailers are | ||||||||||
| appended using ``git interpret-trailers``. | ||||||||||
| See :manpage:`git-interpret-trailers(1)`. | ||||||||||
| :return: | ||||||||||
| :class:`Commit` object representing the new commit. | ||||||||||
|
|
@@ -678,6 +687,27 @@ def create_from_tree( | |||||||||
| tree = repo.tree(tree) | ||||||||||
| # END tree conversion | ||||||||||
|
|
||||||||||
| # APPLY TRAILERS | ||||||||||
| if trailers: | ||||||||||
| trailer_args: List[str] = [] | ||||||||||
| if isinstance(trailers, dict): | ||||||||||
| for key, val in trailers.items(): | ||||||||||
| trailer_args.append("--trailer") | ||||||||||
| trailer_args.append(f"{key}: {val}") | ||||||||||
| else: | ||||||||||
| for key, val in trailers: | ||||||||||
| trailer_args.append("--trailer") | ||||||||||
| trailer_args.append(f"{key}: {val}") | ||||||||||
|
|
||||||||||
| cmd = ["git", "interpret-trailers"] + trailer_args | ||||||||||
| proc: Git.AutoInterrupt = repo.git.execute( # type: ignore[call-overload] | ||||||||||
| cmd, | ||||||||||
| as_process=True, | ||||||||||
| istream=PIPE, | ||||||||||
| ) | ||||||||||
| message = proc.communicate(str(message).encode())[0].decode("utf8") | ||||||||||
|
||||||||||
| message = proc.communicate(str(message).encode())[0].decode("utf8") | |
| stdout_bytes, _ = proc.communicate(str(message).encode()) | |
| finalize_process(proc) | |
| message = stdout_bytes.decode("utf8") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cmdhard-codes the git executable as the literal string "git". This bypasses GitPython’s configured executable (repo.git.GIT_PYTHON_GIT_EXECUTABLE) and can break environments that override it (custom path/wrapper). Consider building the command using the configured executable (and ideally aligning with the existingtrailers_listimplementation too).