feat: use .gitignore

This commit is contained in:
2026-08-06 01:20:58 +03:00
parent d062447e6d
commit 9d15380443
13 changed files with 183 additions and 130 deletions
+24 -11
View File
@@ -1,26 +1,37 @@
import logging
from collections import Counter
from enum import StrEnum
from pathlib import Path
from typing import Iterable
from .common.command import CommandError
from .entry import Entry, EntryResolver
from .common.ignore import create_ignore
from .entry.entry import Entry
from .entry.resolver import EntryResolver
from .preset.detector import PresetEntryDetector
logger = logging.getLogger("project")
class ResultType(StrEnum):
SUCCESS = "success"
FAILED = "failed"
RESULT_ICONS = {
ResultType.SUCCESS: "🟢",
ResultType.FAILED: "🔴",
}
class ProjectManager:
# TODO: from .gitignore?
DEFAULT_IGNORE = ["node_modules", ".venv", ".git", "tests", "__pycache__"]
_logger = logger
def __init__(self, basepath: Path):
self._basepaht = basepath
self._resolver = EntryResolver(
PresetEntryDetector(),
self.DEFAULT_IGNORE,
)
detector = PresetEntryDetector()
ignore = create_ignore(basepath)
self._resolver = EntryResolver(detector, ignore)
def _iter_entries(self) -> Iterable[Entry]:
return self._resolver.resolve(self._basepaht)
@@ -30,12 +41,14 @@ class ProjectManager:
for entry in self._iter_entries():
try:
if entry.run_task(task_name, tag):
counter["success"] += 1
counter[ResultType.SUCCESS] += 1
except CommandError as error:
self._logger.error("%s\n%s", entry, error.output)
counter["failed"] += 1
counter[ResultType.FAILED] += 1
except:
self._logger.exception(entry)
counter["failed"] += 1
self._logger.info("result %s", dict(counter))
counter[ResultType.FAILED] += 1
self._logger.info(
"%s", "\n".join(f"{RESULT_ICONS[k]} {v}" for k, v in counter.items())
)
return counter