fix(claude-hooks): strip commit-message contents before pattern match (false positive)

This commit is contained in:
bot-backend 2026-07-02 18:15:50 +03:00
parent 4a33347aee
commit 0bbfd0e13e

View file

@ -48,12 +48,27 @@ PATTERNS: list[tuple[str, str]] = [
] ]
def strip_commit_messages(cmd: str) -> str:
"""Вырезает содержимое -m/--message аргументов git commit.
Иначе false-positive: `git commit -m "запретили rm -rf"` блокируется из-за
текста сообщения. Пейлоады обёрток (powershell -c "git push --force") не
страдают они не привязаны к -m.
"""
return re.sub(
r"(\s(?:-m|--message))\s+(\"(?:[^\"\\]|\\.)*\"|'[^']*')",
r"\1 MSG",
cmd,
)
def main() -> int: def main() -> int:
try: try:
data = json.load(sys.stdin) data = json.load(sys.stdin)
if data.get("tool_name") != "Bash": if data.get("tool_name") != "Bash":
return 0 return 0
cmd = (data.get("tool_input") or {}).get("command") or "" cmd = (data.get("tool_input") or {}).get("command") or ""
cmd = strip_commit_messages(cmd)
for pattern, reason in PATTERNS: for pattern, reason in PATTERNS:
if re.search(pattern, cmd): if re.search(pattern, cmd):
print( print(