61 lines
999 B
Python
61 lines
999 B
Python
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" |