From b07d2e00d40692f9076e65cfe41140d4515b7b32 Mon Sep 17 00:00:00 2001 From: Daniel Fütterer <df89@outlook.com> Date: Tue, 27 Apr 2021 14:12:29 +0200 Subject: [PATCH] feat: Added version with scopes --- oop_changelog.py | 88 ++++++++++++++++++++++++++++---------------- 1 files changed, 56 insertions(+), 32 deletions(-) diff --git a/oop_changelog.py b/oop_changelog.py index a7d7637..fe19006 100644 --- a/oop_changelog.py +++ b/oop_changelog.py @@ -1,5 +1,10 @@ import os.path +## To Do +# - Breaking Changes +# - Merge Commits +# - Error Handling + def getSeparatedGitLog(repo): try: stream = os.popen("git -C {} log --format=%B--SEP--%H--SEP--%d--END--".format(repo)) @@ -34,7 +39,13 @@ self.setCommitType() def setSubjectAndBody(self): - subStart = self.completeMessage.index(": ")+2 + try: + subStart = self.completeMessage.index(": ")+2 + except: + try: + subStart = self.completeMessage.index("\n") + except: + subStart = 0 try: subEnd = self.completeMessage.index("\n") except: @@ -55,9 +66,14 @@ def setCommitType(self): for commitType in self.commitTypes: - if (self.completeMessage.startswith((commitType + ": "))) or (self.completeMessage.startswith((commitType + "("))): + if (self.completeMessage.startswith((commitType + ": "))) or (self.completeMessage.startswith((commitType + "("))) or (self.completeMessage.startswith((commitType + " ("))): self.commitType = commitType break + else: + self.commitType = "nonconform" + + def getCommitMessageWithType(self): + return self.commitType + ": " + self.subject class CommitTag: @@ -103,12 +119,18 @@ self.body = CommitBody(rawCommit.body) self.tag = CommitTag(rawCommit.tag) self.hash = rawCommit.hash + + def appendShortHash(self): + return " (" + self.hash[:6] + ")" #### Main #### -commitList = getSeparatedGitLog("/Users/daniel/Desktop/testrepo") +pathToRepo = "/Users/daniel/Developer/Repos/HfM/schumacher/Prisma-Binauralize" +#pathToRepo = "/Users/daniel/Desktop/testrepo" + +commitList = getSeparatedGitLog(pathToRepo) # Create a list of commits commitHistory = [] @@ -131,51 +153,53 @@ fileTemplate = ["# Changelog"] for tag in taggedHistory: # A Dictionairy to store grouped commits - commitsByType = {"Fixes":[], "Features":[], "Other":[]} - commitsByScope = {} + commitsByType = {"fix":[], "feat":[], "Other":[], "Nonconform":[]} # If latest commit has no tag: if not tag[0]: - fileTemplate.append("\n## No version number yet ") + fileTemplate.append("\n## No version number yet") else: fileTemplate.append("\n## Version " + tag[0].tagAsString) # Grouping by CommitTypes for commit in tag[1:]: - # Dealing with scopes - if commit.body.scope: - if commit.body.scope not in commitsByScope: - commitsByScope[commit.body.scope] = [commit] - else: - commitsByScope[commit.body.scope].append(commit) - for scope in commitsByScope: - fileTemplate.append("\n### Scope: " + scope) - for commit in commitsByScope[scope]: - fileTemplate.append("\n- " + commit.body.commitType + ": " + commit.body.subject + " (" + commit.hash[:6] + ")") + if commit.body.commitType == CommitBody.commitTypes[5]: # fix + commitsByType["fix"].append(commit) + elif commit.body.commitType == CommitBody.commitTypes[4]: # feat + commitsByType["feat"].append(commit) + elif commit.body.commitType == "nonconform": + commitsByType["Nonconform"].append(commit) else: - # Sorting in predifend groups - if commit.body.commitType == CommitBody.commitTypes[5]: # fix - commitsByType["Fixes"].append(commit) - elif commit.body.commitType == CommitBody.commitTypes[4]: # feat - commitsByType["Features"].append(commit) - else: - commitsByType["Other"].append(commit) + commitsByType["Other"].append(commit) - if len(commitsByType["Features"]) != 0: + if len(commitsByType["feat"]) != 0: fileTemplate.append("### Features") - for feature in commitsByType["Features"]: - fileTemplate.append("- " + feature.body.subject + " (" + feature.hash[:6] + ")") - if len(commitsByType["Fixes"]) != 0: + for feature in commitsByType["feat"]: + if feature.body.scope: + fileTemplate.append("- **" + feature.body.scope + "**: " + feature.body.subject + feature.appendShortHash()) + else: + fileTemplate.append("- " + feature.body.subject + feature.appendShortHash()) + if len(commitsByType["fix"]) != 0: fileTemplate.append("### Fixes") - for fix in commitsByType["Fixes"]: - fileTemplate.append("- " + fix.body.subject + " (" + fix.hash[:6] + ")") + for fix in commitsByType["fix"]: + if fix.body.scope: + fileTemplate.append("- **" + fix.body.scope + "**: " + fix.body.scope + fix.appendShortHash()) + else: + fileTemplate.append("- " + fix.body.subject + fix.appendShortHash()) if len(commitsByType["Other"]) != 0: fileTemplate.append("### Other") for other in commitsByType["Other"]: - fileTemplate.append("\n- " + other.body.commitType + ": " + other.body.subject + " (" + other.hash[:6] + ")") - + if other.body.scope: + fileTemplate.append("- **" + other.body.scope + "**: " + other.body.getCommitMessageWithType() + other.appendShortHash()) + else: + fileTemplate.append("- " + other.body.getCommitMessageWithType() + other.appendShortHash()) + if len(commitsByType["Nonconform"]) != 0: + fileTemplate.append("### Non-conventional") + for nonconform in commitsByType["Nonconform"]: + fileTemplate.append("- " + nonconform.body.subject + nonconform.appendShortHash()) + # write into changelog -with open("changelog.md", "w") as file: +with open(pathToRepo + "/changelog.md", "w") as file: for line in fileTemplate: file.write(line + "\n") \ No newline at end of file -- Gitblit v1.9.1