Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork966
Expand file tree
/
Copy pathdb.py
More file actions
66 lines (49 loc) · 2.21 KB
/
db.py
File metadata and controls
66 lines (49 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""Module with our own gitdb implementation - it uses the git command"""
fromgit.utilimportbin_to_hex,hex_to_bin
fromgitdb.baseimport (
OInfo,
OStream
)
fromgitdb.dbimportGitDB# @UnusedImport
fromgitdb.dbimportLooseObjectDB
fromgitdb.excimportBadObject
fromgit.excimportGitCommandError
# typing-------------------------------------------------
fromtypingimportTYPE_CHECKING,AnyStr
fromgit.typesimportPathLike
ifTYPE_CHECKING:
fromgit.cmdimportGit
# --------------------------------------------------------
__all__= ('GitCmdObjectDB','GitDB')
classGitCmdObjectDB(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
definfo(self,sha:bytes)->OInfo:
hexsha,typename,size=self._git.get_object_header(bin_to_hex(sha))
returnOInfo(hex_to_bin(hexsha),typename,size)
defstream(self,sha:bytes)->OStream:
"""For now, all lookup is done by git itself"""
hexsha,typename,size,stream=self._git.stream_object_data(bin_to_hex(sha))
returnOStream(hex_to_bin(hexsha),typename,size,stream)
# { Interface
defpartial_to_complete_sha_hex(self,partial_hexsha:AnyStr)->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)
returnhex_to_bin(hexsha)
except (GitCommandError,ValueError)ase:
raiseBadObject(partial_hexsha)frome
# END handle exceptions
#} END interface