Compare commits

..

3 commits

Author SHA1 Message Date
bom
0b3daf595a WIP rework git handler 2023-02-22 09:59:35 +01:00
bom
0f4899bf39 Fix typos in services.py 2023-02-22 09:59:16 +01:00
bom
72e9add5af Add system repository for command line handling 2023-02-22 09:58:57 +01:00
3 changed files with 39 additions and 59 deletions

View file

@ -1,5 +1,7 @@
import os import os
import subprocess as sub import subprocess as sub
from system_repository import SystemRepository
from release_type import ReleaseType
# define semantics for release types by commit messages # define semantics for release types by commit messages
## snapshot - snapshot release ## snapshot - snapshot release
@ -15,63 +17,18 @@ FORMAT_DEC = "%d"
PRETTY_OPTION = '--pretty=' PRETTY_OPTION = '--pretty='
DECORATE_OPTION = '--decorate=full' DECORATE_OPTION = '--decorate=full'
# git log --oneline --format="%s %b" origin/master...HEAD
class GitRepo(): class GitRepo():
def __init__(self): def __init__(self):
self.commits = None self.latest_commit = None
self.tags = None self.system_repository = SystemRepository()
def __clean_commit_string(self, commit_string): def get_latest_commit(self):
return commit_string.replace('\"', "").replace('\n', "").split() 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()

View file

@ -1,5 +1,6 @@
import version_repository from version_repository import VersionRepository
import release_type from release_type import ReleaseType
class InitReleaseService(): class InitReleaseService():
def __init__(self, commit_id, file): def __init__(self, commit_id, file):
@ -15,7 +16,7 @@ class InitReleaseService():
def get_version(self, release_type): def get_version(self, release_type):
self.version_repo = VersionRepository(self.file) self.version_repo = VersionRepository(self.file)
return repo.get_version(release_type) return self.version_repo.get_version(release_type)
def create_release_version(self): def create_release_version(self):
commit_message = self.read_commit_message(self.commit_id) commit_message = self.read_commit_message(self.commit_id)

22
system_repository.py Normal file
View file

@ -0,0 +1,22 @@
import subprocess as sub
class SystemRepository():
def __init__(self):
self.stdout = [""]
self.stderr = [""]
def run(self, *args):
stream = sub.Popen(args,
stdout=sub.PIPE,
stderr=sub.PIPE,
text=True,
encoding="UTF-8")
self.stdout = stream.stdout.readlines()
self.stderr = stream.stderr.readlines()
def run_checked(self, *args):
self.run(args)
if len(self.stderr) > 0:
raise Exception(f"Command failed with: {self.stderr}")