diff options
author | noptuno <repollo.marrero@gmail.com> | 2023-04-28 02:29:30 +0200 |
---|---|---|
committer | noptuno <repollo.marrero@gmail.com> | 2023-04-28 02:29:30 +0200 |
commit | 355dee533bb34a571b9367820a63cccb668cf866 (patch) | |
tree | 838af886b4fec07320aeb10f0d1e74ba79e79b5c /venv/lib/python3.9/site-packages/git/db.py | |
parent | added pyproject.toml file (diff) | |
download | gpt4free-355dee533bb34a571b9367820a63cccb668cf866.tar gpt4free-355dee533bb34a571b9367820a63cccb668cf866.tar.gz gpt4free-355dee533bb34a571b9367820a63cccb668cf866.tar.bz2 gpt4free-355dee533bb34a571b9367820a63cccb668cf866.tar.lz gpt4free-355dee533bb34a571b9367820a63cccb668cf866.tar.xz gpt4free-355dee533bb34a571b9367820a63cccb668cf866.tar.zst gpt4free-355dee533bb34a571b9367820a63cccb668cf866.zip |
Diffstat (limited to 'venv/lib/python3.9/site-packages/git/db.py')
-rw-r--r-- | venv/lib/python3.9/site-packages/git/db.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/venv/lib/python3.9/site-packages/git/db.py b/venv/lib/python3.9/site-packages/git/db.py new file mode 100644 index 00000000..bff43347 --- /dev/null +++ b/venv/lib/python3.9/site-packages/git/db.py @@ -0,0 +1,63 @@ +"""Module with our own gitdb implementation - it uses the git command""" +from git.util import bin_to_hex, hex_to_bin +from gitdb.base import OInfo, OStream +from gitdb.db import GitDB # @UnusedImport +from gitdb.db import LooseObjectDB + +from gitdb.exc import BadObject +from git.exc import GitCommandError + +# typing------------------------------------------------- + +from typing import TYPE_CHECKING +from git.types import PathLike + +if TYPE_CHECKING: + from git.cmd import Git + + +# -------------------------------------------------------- + +__all__ = ("GitCmdObjectDB", "GitDB") + + +class GitCmdObjectDB(LooseObjectDB): + + """A database representing the default git object store, which includes loose + objects, pack files and an alternates file + + It will create objects only in the loose object database. + :note: for now, we use the git command to do all the lookup, just until he + have packs and the other implementations + """ + + def __init__(self, root_path: PathLike, git: "Git") -> None: + """Initialize this instance with the root and a git command""" + super(GitCmdObjectDB, self).__init__(root_path) + self._git = git + + def info(self, binsha: bytes) -> OInfo: + hexsha, typename, size = self._git.get_object_header(bin_to_hex(binsha)) + return OInfo(hex_to_bin(hexsha), typename, size) + + def stream(self, binsha: bytes) -> OStream: + """For now, all lookup is done by git itself""" + hexsha, typename, size, stream = self._git.stream_object_data(bin_to_hex(binsha)) + return OStream(hex_to_bin(hexsha), typename, size, stream) + + # { Interface + + def partial_to_complete_sha_hex(self, partial_hexsha: str) -> bytes: + """:return: Full binary 20 byte sha from the given partial hexsha + :raise AmbiguousObjectName: + :raise BadObject: + :note: currently we only raise BadObject as git does not communicate + AmbiguousObjects separately""" + try: + hexsha, _typename, _size = self._git.get_object_header(partial_hexsha) + return hex_to_bin(hexsha) + except (GitCommandError, ValueError) as e: + raise BadObject(partial_hexsha) from e + # END handle exceptions + + # } END interface |