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
#!/usr/bin/env -S uv run python
from __future__ import annotations
__VERSION__ = "1"
import os
import sys
import pygit2
from pygittools.hooks import HookResult, parse_ref_updates
from pygittools.hooks_patterns import PreReceiveProtectedPattern
PROTECTED_REF_PATTERN = os.environ.get("PYGITWEB_PROTECTED_REF_PATTERN", r"^refs/heads/(main|master)$")
COMMIT_MSG_PATTERN = os.environ.get("PYGITWEB_COMMIT_MSG_PATTERN", r"^(\S+): (.+)")
REJECT_MERGE_COMMITS = os.environ.get("PYGITWEB_REJECT_MERGE_COMMITS", "").lower() in {
"1",
"true",
"yes",
}
def main() -> int:
repo = pygit2.Repository(".")
updates = parse_ref_updates(sys.stdin)
result = PreReceiveProtectedPattern(
repo,
PROTECTED_REF_PATTERN,
COMMIT_MSG_PATTERN,
reject_merge_commits=REJECT_MERGE_COMMITS,
).run(updates)
return int(result.value)
if __name__ == "__main__":
raise SystemExit(main())