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.latest_commit = self.system_repository.run_checked('git', 'log', '--oneline', '--format="%s %b"', '-n' + '1') 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 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)