diff options
| author | Sebastian Thiel <byronimo@gmail.com> | 2010-11-23 09:14:17 +0100 |
|---|---|---|
| committer | Sebastian Thiel <byronimo@gmail.com> | 2010-11-23 09:14:17 +0100 |
| commit | dec4663129f72321a14efd6de63f14a7419e3ed2 (patch) | |
| tree | 3d8c25eafc4fbf4110741f2d243c3e9c54642638 /refs/tag.py | |
| parent | fca367548e365f93c58c47dea45507025269f59a (diff) | |
| download | GitPython-dec4663129f72321a14efd6de63f14a7419e3ed2.tar.gz GitPython-dec4663129f72321a14efd6de63f14a7419e3ed2.zip | |
Split ref implementation up into multiple files, to make room for the log implementation
Diffstat (limited to 'refs/tag.py')
| -rw-r--r-- | refs/tag.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/refs/tag.py b/refs/tag.py new file mode 100644 index 00000000..c09d814d --- /dev/null +++ b/refs/tag.py @@ -0,0 +1,91 @@ +from reference import Reference + +__all__ = ["TagReference", "Tag"] + + + +class TagReference(Reference): + """Class representing a lightweight tag reference which either points to a commit + ,a tag object or any other object. In the latter case additional information, + like the signature or the tag-creator, is available. + + This tag object will always point to a commit object, but may carray additional + information in a tag object:: + + tagref = TagReference.list_items(repo)[0] + print tagref.commit.message + if tagref.tag is not None: + print tagref.tag.message""" + + __slots__ = tuple() + _common_path_default = "refs/tags" + + @property + def commit(self): + """:return: Commit object the tag ref points to""" + obj = self.object + if obj.type == "commit": + return obj + elif obj.type == "tag": + # it is a tag object which carries the commit as an object - we can point to anything + return obj.object + else: + raise ValueError( "Tag %s points to a Blob or Tree - have never seen that before" % self ) + + @property + def tag(self): + """ + :return: Tag object this tag ref points to or None in case + we are a light weight tag""" + obj = self.object + if obj.type == "tag": + return obj + return None + + # make object read-only + # It should be reasonably hard to adjust an existing tag + object = property(Reference._get_object) + + @classmethod + def create(cls, repo, path, ref='HEAD', message=None, force=False, **kwargs): + """Create a new tag reference. + + :param path: + The name of the tag, i.e. 1.0 or releases/1.0. + The prefix refs/tags is implied + + :param ref: + A reference to the object you want to tag. It can be a commit, tree or + blob. + + :param message: + If not None, the message will be used in your tag object. This will also + create an additional tag object that allows to obtain that information, i.e.:: + + tagref.tag.message + + :param force: + If True, to force creation of a tag even though that tag already exists. + + :param kwargs: + Additional keyword arguments to be passed to git-tag + + :return: A new TagReference""" + args = ( path, ref ) + if message: + kwargs['m'] = message + if force: + kwargs['f'] = True + + repo.git.tag(*args, **kwargs) + return TagReference(repo, "%s/%s" % (cls._common_path_default, path)) + + @classmethod + def delete(cls, repo, *tags): + """Delete the given existing tag or tags""" + repo.git.tag("-d", *tags) + + + +# provide an alias +Tag = TagReference |
