91 lines
2.1 KiB
Python
91 lines
2.1 KiB
Python
"""Block deprecated product names in tracked repository text."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import re
|
|
import subprocess
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
from typing import Iterable
|
|
|
|
DEPRECATED_NAME_RE = re.compile(r"\bever[\s_-]*core\b", flags=re.IGNORECASE)
|
|
SKIP_SUFFIXES = frozenset(
|
|
{
|
|
".avif",
|
|
".bmp",
|
|
".gif",
|
|
".heic",
|
|
".heif",
|
|
".icns",
|
|
".ico",
|
|
".jpeg",
|
|
".jpg",
|
|
".mov",
|
|
".mp4",
|
|
".png",
|
|
".webp",
|
|
}
|
|
)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Violation:
|
|
path: str
|
|
line_number: int
|
|
line: str
|
|
|
|
|
|
def find_violations(files: Iterable[tuple[str, str]]) -> list[Violation]:
|
|
violations: list[Violation] = []
|
|
for path, text in files:
|
|
for line_number, line in enumerate(text.splitlines(), start=1):
|
|
if DEPRECATED_NAME_RE.search(line):
|
|
violations.append(
|
|
Violation(path=path, line_number=line_number, line=line.strip())
|
|
)
|
|
return violations
|
|
|
|
|
|
def _tracked_paths() -> list[Path]:
|
|
result = subprocess.run(
|
|
["git", "ls-files", "-z"],
|
|
check=True,
|
|
stdout=subprocess.PIPE,
|
|
text=False,
|
|
)
|
|
return [
|
|
Path(raw.decode("utf-8"))
|
|
for raw in result.stdout.split(b"\0")
|
|
if raw
|
|
]
|
|
|
|
|
|
def _tracked_text_files() -> Iterable[tuple[str, str]]:
|
|
for path in _tracked_paths():
|
|
if path.suffix.lower() in SKIP_SUFFIXES:
|
|
continue
|
|
try:
|
|
text = path.read_text(encoding="utf-8")
|
|
except UnicodeDecodeError:
|
|
continue
|
|
yield path.as_posix(), text
|
|
|
|
|
|
def main() -> int:
|
|
violations = find_violations(_tracked_text_files())
|
|
if not violations:
|
|
print("Deprecated-name check passed.")
|
|
return 0
|
|
|
|
print(
|
|
"Deprecated-name check failed.\n"
|
|
"Use EverOS or EverMind Cloud. Do not use deprecated product naming.\n"
|
|
)
|
|
for violation in violations:
|
|
print(f"- {violation.path}:{violation.line_number}: {violation.line}")
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|