Source code for git_wrapper.tag

#! /usr/bin/env python
"""This module acts as an interface for acting on git tags"""

import git

from git_wrapper import exceptions
from git_wrapper.utils.decorators import reference_exists


[docs]class GitTag(object): def __init__(self, git_repo, logger): """Constructor for GitTag object :param repo.GitRepo git_repo: An already constructed GitRepo object :param logging.Logger logger: A pre-configured Python Logger object """ self.git_repo = git_repo self.logger = logger
[docs] @reference_exists('reference') def create(self, name, reference): """Create a new tag to the target reference. :param str name: New tag's name :param str reference: What the tag should point to """ try: self.git_repo.repo.create_tag(name, reference) except git.GitCommandError as ex: msg = f"Error creating tag {name} on {reference}. Error: {ex}" raise exceptions.TaggingException(msg) from ex
[docs] @reference_exists('name') def delete(self, name): """Delete tag from local repository :param str name: Tag name to delete """ try: self.git_repo.git.tag("-d", name) except git.GitCommandError as ex: msg = f"Error deleting tag {name}. Error: {ex}" raise exceptions.TaggingException(msg) from ex
[docs] @reference_exists('name') def push(self, name, remote, dry_run=False): """Push specified tag to specified remote :param str name: Tag name :param str remote: Remote to push the tag to :param bool dry_run: Whether to run the commands in dry-run mode """ if remote not in self.git_repo.remote.names(): msg = f"No remote named {remote}" raise exceptions.ReferenceNotFoundException(msg) msg = (f"Error pushing tag {name} (dry-run: {dry_run}) to remote " f"{remote}.") try: if dry_run: self.git_repo.git.push("-n", remote, name) else: self.git_repo.git.push(remote, name) except git.GitCommandError as ex: raise exceptions.PushException(msg) from ex
[docs] def names(self): """List git tags in the repository.""" try: tags_list = [x.name for x in self.git_repo.repo.tags] except git.GitCommandError as ex: repo_path = self.git_repo.repo.working_dir msg = f"Error listing tags for {repo_path}. Error: {ex}" raise exceptions.TaggingException(msg) from ex return tags_list