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 pathtag.py
More file actions
93 lines (79 loc) · 3.68 KB
/
tag.py
File metadata and controls
93 lines (79 loc) · 3.68 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# objects.py
# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors
#
# This module is part of GitPython and is released under
# the BSD License: http://www.opensource.org/licenses/bsd-license.php
""" Module containing all object based types. """
from .importbase
from .utilimportget_object_type_by_name,parse_actor_and_date
from ..utilimporthex_to_bin
from ..compatimportdefenc
fromtypingimportList,TYPE_CHECKING,Union
fromgit.typesimportLiteral
ifTYPE_CHECKING:
fromgit.repoimportRepo
fromgit.utilimportActor
from .commitimportCommit
from .blobimportBlob
from .treeimportTree
__all__= ("TagObject", )
classTagObject(base.Object):
"""Non-Lightweight tag carrying additional information about an object we are pointing to."""
type:Literal['tag']="tag"
__slots__= ("object","tag","tagger","tagged_date","tagger_tz_offset","message")
def__init__(self,repo:'Repo',binsha:bytes,
object:Union[None,base.Object]=None,
tag:Union[None,str]=None,
tagger:Union[None,'Actor']=None,
tagged_date:Union[int,None]=None,
tagger_tz_offset:Union[int,None]=None,
message:Union[str,None]=None
)->None:# @ReservedAssignment
"""Initialize a tag object with additional data
:param repo: repository this object is located in
:param binsha: 20 byte SHA1
:param object: Object instance of object we are pointing to
:param tag: name of this tag
:param tagger: Actor identifying the tagger
:param tagged_date: int_seconds_since_epoch
is the DateTime of the tag creation - use time.gmtime to convert
it into a different format
:param tagged_tz_offset: int_seconds_west_of_utc is the timezone that the
authored_date is in, in a format similar to time.altzone"""
super(TagObject,self).__init__(repo,binsha)
ifobjectisnotNone:
self.object:Union['Commit','Blob','Tree','TagObject']=object
iftagisnotNone:
self.tag=tag
iftaggerisnotNone:
self.tagger=tagger
iftagged_dateisnotNone:
self.tagged_date=tagged_date
iftagger_tz_offsetisnotNone:
self.tagger_tz_offset=tagger_tz_offset
ifmessageisnotNone:
self.message=message
def_set_cache_(self,attr:str)->None:
"""Cache all our attributes at once"""
ifattrinTagObject.__slots__:
ostream=self.repo.odb.stream(self.binsha)
lines:List[str]=ostream.read().decode(defenc,'replace').splitlines()
_obj,hexsha=lines[0].split(" ")
_type_token,type_name=lines[1].split(" ")
object_type=get_object_type_by_name(type_name.encode('ascii'))
self.object= \
object_type(self.repo,hex_to_bin(hexsha))
self.tag=lines[2][4:]# tag <tag name>
iflen(lines)>3:
tagger_info=lines[3]# tagger <actor> <date>
self.tagger,self.tagged_date,self.tagger_tz_offset=parse_actor_and_date(tagger_info)
# line 4 empty - it could mark the beginning of the next header
# in case there really is no message, it would not exist. Otherwise
# a newline separates header from message
iflen(lines)>5:
self.message="\n".join(lines[5:])
else:
self.message=''
# END check our attributes
else:
super(TagObject,self)._set_cache_(attr)