61 lines
1.7 KiB
Python
Executable file
61 lines
1.7 KiB
Python
Executable file
#!/usr/bin/env python
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
from subprocess import CalledProcessError
|
|
|
|
try:
|
|
from commitizen.cz.utils import get_backup_file_path
|
|
except ImportError as error:
|
|
print("could not import commitizen:")
|
|
print(error)
|
|
exit(1)
|
|
|
|
|
|
def prepare_commit_msg(commit_msg_file: str) -> int:
|
|
# check if the commit message needs to be generated using commitizen
|
|
exit_code = subprocess.run(
|
|
[
|
|
"cz",
|
|
"check",
|
|
"--commit-msg-file",
|
|
commit_msg_file,
|
|
],
|
|
capture_output=True,
|
|
).returncode
|
|
if exit_code != 0:
|
|
backup_file = Path(get_backup_file_path())
|
|
if backup_file.is_file():
|
|
# confirm if commit message from backup file should be reused
|
|
answer = input("retry with previous message? [y/N]: ")
|
|
if answer.lower() == "y":
|
|
shutil.copyfile(backup_file, commit_msg_file)
|
|
return 0
|
|
|
|
# use commitizen to generate the commit message
|
|
try:
|
|
subprocess.run(
|
|
[
|
|
"cz",
|
|
"commit",
|
|
"--dry-run",
|
|
"--write-message-to-file",
|
|
commit_msg_file,
|
|
],
|
|
stdin=sys.stdin,
|
|
stdout=sys.stdout,
|
|
).check_returncode()
|
|
except CalledProcessError as error:
|
|
return error.returncode
|
|
|
|
# write message to backup file
|
|
shutil.copyfile(commit_msg_file, backup_file)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# make hook interactive by attaching /dev/tty to stdin
|
|
with open("/dev/tty") as tty:
|
|
sys.stdin = tty
|
|
exit(prepare_commit_msg(sys.argv[1]))
|