Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork40
Expand file tree
/
Copy pathgenerate_commit_msg.py
More file actions
executable file
·94 lines (80 loc) · 2.7 KB
/
generate_commit_msg.py
File metadata and controls
executable file
·94 lines (80 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env python
"""
Generate a commit message
Parses staged files and generates a commit message with Last-Translator's as
co-authors.
Based on Stan Ulbrych's implementation for Python Doc' Polish team
"""
importargparse
importcontextlib
importos
fromsubprocessimportrun,CalledProcessError
frompathlibimportPath
frompolibimportpofile,POFile
defgenerate_commit_msg():
translators:set[str]=set()
result=run(
["git","diff","--cached","--name-only","--diff-filter=ACM"],
capture_output=True,
text=True,
check=True,
)
staged= [
filenameforfilenameinresult.stdout.splitlines()iffilename.endswith(".po")
]
forfileinstaged:
staged_file=run(
["git","show",f":{file}"],capture_output=True,text=True,check=True
).stdout
try:
old_file=run(
["git","show",f"HEAD:{file}"],
capture_output=True,
text=True,
check=True,
).stdout
exceptCalledProcessError:
old_file=""
new_po=pofile(staged_file)
old_po=pofile(old_file)ifold_fileelsePOFile()
old_entries= {entry.msgid:entry.msgstrforentryinold_po}
forentryinnew_po:
ifentry.msgstrand (
entry.msgidnotinold_entries
orold_entries[entry.msgid]!=entry.msgstr
):
# Prevent failure on missing Last-Translator field.
# Transifex only adds Last-Translator if someone from
# the team translated. If it was uploaded by an account
# that is not in the team, this field will be missing.
translator= (
(new_po.metadata.get("Last-Translator")or"").split(",")[0].strip()
)
iftranslator:
translators.add(f"Co-Authored-By:{translator}")
break
print("Update translation\n\n"+"\n".join(translators))
# contextlib implemented chdir since Python 3.11
@contextlib.contextmanager
defchdir(path:Path):
"""Temporarily change the working directory."""
original_dir=Path.cwd()
os.chdir(path)
try:
yield
finally:
os.chdir(original_dir)
if__name__=="__main__":
parser=argparse.ArgumentParser(
description="Generate commit message with translators as co-authors."
)
parser.add_argument(
"path",
type=Path,
nargs="?",
default=".",
help="Path to the Git repository (default: current directory)",
)
args=parser.parse_args()
withchdir(args.path):
generate_commit_msg()