diff --git a/git_handler.py b/git_handler.py index 3f30551..95d2915 100644 --- a/git_handler.py +++ b/git_handler.py @@ -1,5 +1,7 @@ import os import subprocess as sub +from system_repository import SystemRepository +from release_type import ReleaseType # define semantics for release types by commit messages ## snapshot - snapshot release @@ -14,64 +16,19 @@ FORMAT = '"%h %s"' FORMAT_DEC = "%d" PRETTY_OPTION = '--pretty=' DECORATE_OPTION = '--decorate=full' - + + +# git log --oneline --format="%s %b" origin/master...HEAD + class GitRepo(): def __init__(self): - self.commits = None - self.tags = None + self.latest_commit = None + self.system_repository = SystemRepository() - def __clean_commit_string(self, commit_string): - return commit_string.replace('\"', "").replace('\n', "").split() + def get_latest_commit(self): + self.latest_commit = self.system_repository.run_checked('git', 'log', '--oneline', '--format="%s %b"', '-n' + '1') - def __clean_tag_string(self, tag_string): - return tag_string.replace(" ", "").replace('\n', "") - - def get_tags(self): - stream = sub.Popen([GIT, - LOG, - PRETTY_OPTION + FORMAT_DEC, - DECORATE_OPTION], - stdout=sub.PIPE, - stderr=sub.PIPE, - text=True, - encoding="UTF-8") - stdout = stream.stdout.readlines() - stderr = stream.stderr.readlines() - - if len(stderr) > 0: - raise Exception(f"Git command failed with: {stderr}") - - return stdout - - def get_commits(self): - stream = sub.Popen([GIT, - LOG, - PRETTY_OPTION + FORMAT], - stdout=sub.PIPE, - stderr=sub.PIPE, - text=True, - encoding="UTF-8") - stdout = stream.stdout.readlines() - stderr = stream.stderr.readlines() - - if len(stderr) > 0: - raise Exception(f"Git command failed with: {stderr}") - - self.tags = self.get_tags() - self.commits = {} - - if len(self.tags) != len(stdout): - raise Exception("Tags list did not match commits list") - - for i, elem in enumerate(stdout): - commit_string = self.__clean_commit_string(elem) - - commit_id = commit_string[0] - commit_message = " ".join(commit_string[1:len(commit_string)]) - commit_tag = self.__clean_tag_string(self.tags[i]) - - self.commits[commit_id] = [commit_tag, commit_message] - - return self.commits - + def get_release_type_from_latest_commit(self): + if self.latest_commit is None: + self.get_latest_commit()