import os import subprocess as sub from pathlib import Path from system_repository import SystemRepository from release_type import ReleaseType class GitRepository(): def __init__(self): self.latest_commit = None self.system_repository = SystemRepository() @classmethod def create_from_commit_string(cls, commit_string): inst = cls() inst.latest_commit = commit_string return inst def get_latest_commit(self): self.system_repository.run_checked('git', 'log', '--oneline', '--format="%s %b"', '-n 1') self.latest_commit = " ".join(self.system_repository.stdout) # returns a list of strings otherwise def get_release_type_from_latest_commit(self): if self.latest_commit is None: self.get_latest_commit() if ReleaseType.MAJOR.name in self.latest_commit.upper(): return ReleaseType.MAJOR elif ReleaseType.MINOR.name in self.latest_commit.upper(): return ReleaseType.MINOR elif ReleaseType.PATCH.name in self.latest_commit.upper(): return ReleaseType.PATCH elif ReleaseType.SNAPSHOT.name in self.latest_commit.upper(): return ReleaseType.SNAPSHOT else: return None def tag_annotated(self, annotation: str, message: str): self.system_repository.run_checked('git', 'tag', '-a', annotation, '-m', message) def get_current_branch(self): self.system_repository.run_checked('git', 'branch', '--show-current') def add_file(self, file_path: Path): self.system_repository.run_checked('git', 'add', file_path) def commit(self, commit_message: str): self.system_repository.run_checked('git', 'commit', '-m', commit_message) def push(self): self.system_repository.run_checked('git', 'push') def checkout(self, branch: str): self.system_repository.run_checked('git', 'checkout', branch)