aboutsummaryrefslogtreecommitdiff
path: root/lib/git/objects/tag.py
blob: ecf6349df73e3ec54f5a37d7d1e0836d38a1d157 (plain)
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
# 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.
"""
import base
import commit
from utils import get_object_type_by_name

class TagObject(base.Object):
	"""
	Non-Lightweight tag carrying additional information about an object we are pointing 
	to.
	"""
	type = "tag"
	__slots__ = ( "object", "tag", "tagger", "tagged_date", "message" )
		
	def __init__(self, repo, id, object=None, tag=None, 
				tagger=None, tagged_date=None, message=None):
		"""
		Initialize a tag object with additional data
		
		``repo``
			repository this object is located in
			
		``id``
			SHA1 or ref suitable for git-rev-parse
			
		 ``object``
			Object instance of object we are pointing to
		 
		 ``tag``
			name of this tag
			
		 ``tagger``
			Actor identifying the tagger
			
		  ``tagged_date`` : (tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)
			is the DateTime of the tag creation
		"""
		super(TagObject, self).__init__(repo, id )
		self._set_self_from_args_(locals())
		
	def _set_cache_(self, attr):
		"""
		Cache all our attributes at once
		"""
		if attr in TagObject.__slots__:
			lines = self.data.splitlines()
			
			obj, hexsha = lines[0].split(" ")		# object <hexsha>
			type_token, type_name = lines[1].split(" ") # type <type_name>
			self.object = get_object_type_by_name(type_name)(self.repo, hexsha)
			
			self.tag = lines[2][4:]  # tag <tag name>
			
			tagger_info = lines[3][7:]# tagger <actor> <date>
			self.tagger, self.tagged_date = commit.Commit._actor(tagger_info)
			
			# line 4 empty - check git source to figure out purpose
			self.message = "\n".join(lines[5:])
		# END check our attributes
		else:
			super(TagObject, self)._set_cache_(attr)