from datetime import datetime from dataclasses import dataclass from enum import StrEnum OBJ_TYPES = { 1: "commit", 2: "tree", 3: "blob", 4: "tag", 6: "ofs_delta", 7: "ref_delta" } @dataclass class GitUser: name: str email: str time: datetime class GitObjectType(StrEnum): COMMIT = "commit" TREE = "tree" BLOB = "blob" TAG = "tag" @dataclass class GitFile: mode: int filename: str data_hash: str data: bytes | None = None @dataclass class Tree: hash: str files: list[GitFile] bytes: "bytes | None" = None @dataclass class Commit: hash: str tree: Tree | None parent: "Commit | None" author: GitUser | None committer: GitUser | None message: str bytes: "bytes" @dataclass class Blob: hash: str bytes: "bytes" @dataclass class Tag: hash: str name: str | None object: "Commit | Tree | bytes | Tag | None" tagger: GitUser | None message: str bytes: "bytes"