in sync/commit.py [0:0]
def create_commit(repo: Repo, msg: bytes, **kwargs: Any) -> GitPythonCommit:
"""Commit the current index in repo, with msg as the message and additional kwargs
from kwargs
gitpython converts all arguments to strings in a way that doesn't allow
passing bytestrings in as arguments. But it's important to allow providing
a message that doesn't have a known encoding since we can't pre-validate that. So
this re-implements the internals of repo.git.execute to avoid the string conversion"""
prev_head = repo.head.commit
exec_kwargs = {k: v for k, v in kwargs.items() if k in git.cmd.execute_kwargs}
opts_kwargs = {k: v for k, v in kwargs.items() if k not in git.cmd.execute_kwargs}
cmd: list[str | bytes | None] = [repo.git.GIT_PYTHON_GIT_EXECUTABLE]
cmd.extend(repo.git._persistent_git_options)
cmd.append(b"commit")
cmd.append(b"--message=%s" % msg)
for name, value in opts_kwargs.items():
name_bytes = git.cmd.dashify(name).encode("utf8")
if isinstance(value, str):
value = value.encode("utf8")
assert value is None or isinstance(value, (bool, bytes))
if value is True:
dashes = b"-" if len(name) == 1 else b"--"
cmd.append(b"%s%s" % (dashes, name_bytes))
elif isinstance(value, bytes):
if len(name) == 1:
cmd.append(b"-%s" % name_bytes)
cmd.append(value)
else:
cmd.append(b"--%s=%s" % (name_bytes, value))
repo.git.execute(cmd, **exec_kwargs)
head = repo.head.commit
assert prev_head != head
return head