Skip to content
Snippets Groups Projects
Unverified Commit 5aa80204 authored by Rafael Guterres Jeffman's avatar Rafael Guterres Jeffman Committed by GitHub
Browse files

Merge pull request #842 from t-woerner/changelog_for_galaxy

utils/changelog: Fixed --tag option, new --galaxy option
parents a06b16f5 8b8cbdd8
No related branches found
No related tags found
No related merge requests found
...@@ -25,48 +25,6 @@ import argparse ...@@ -25,48 +25,6 @@ import argparse
import subprocess import subprocess
usage = "Usage: changelog [options] [<new version>]"
parser = argparse.ArgumentParser(usage=usage)
parser.add_argument("--tag", dest="tag",
help="git tag")
options, args = parser.parse_known_args()
if len(args) == 1:
new_version = args[0]
elif len(args) != 0:
parser.error("new version is not set")
else:
new_version = None
if options.tag is None:
tag = subprocess.check_output(
"git describe --tags $(git rev-list --tags --max-count=1)",
shell=True)
options.tag = tag.decode("utf-8").strip()
version = options.tag[1:]
command = ["git", "log", "%s.." % options.tag]
process = subprocess.run(command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
if process.returncode != 0:
print("git log failed: %s" % process.stderr.decode("utf8").split("\n")[0])
sys.exit(1)
if new_version is not None:
s = "ansible-freeipa-%s" % new_version
print(s)
print("=" * len(s))
print()
commits = {}
prs = {}
authors = {}
lines = process.stdout.decode("utf-8").split("\n")
class Ref: class Ref:
def __init__(self, commit): def __init__(self, commit):
self.commit = commit self.commit = commit
...@@ -75,11 +33,11 @@ class Ref: ...@@ -75,11 +33,11 @@ class Ref:
def store(commits, prs, authors, commit, author, merge, msg): def store(commits, prs, authors, commit, author, merge, msg):
if commit is not None: if commit is not None:
if msg[0].startswith("Merge pull request #"): if msg[0].startswith("Merge pull request #"):
pr = int(msg[0].split()[3][1:]) pr_ref = int(msg[0].split()[3][1:])
if len(msg) > 1: if len(msg) > 1:
prs[pr] = msg[1].strip() prs[pr_ref] = msg[1].strip()
else: else:
prs[pr] = Ref(merge) prs[pr_ref] = Ref(merge)
else: else:
commits[commit] = msg[0].strip() commits[commit] = msg[0].strip()
authors.setdefault(author, []).append(commit) authors.setdefault(author, []).append(commit)
...@@ -93,6 +51,45 @@ def get_commit(commits, commit): ...@@ -93,6 +51,45 @@ def get_commit(commits, commit):
return commit return commit
def get_output(command):
try:
ret = subprocess.check_output(command, shell=True)
ret = ret.decode("utf-8").strip()
except subprocess.CalledProcessError:
print("Command '%s' failed" % command)
sys.exit(1)
return ret
def changelog(tag):
prev_tag = None
if tag is not None and tag != "":
prev_tag = get_output(
"git describe --tag --abbrev=0 --always '%s^'" % tag)
else:
tag = get_output("git describe --tags --abbrev=0 "
"$(git rev-list --tags --max-count=1)")
version = tag[1:]
if prev_tag is not None:
command = ["git", "log", "%s..%s" % (prev_tag, tag)]
else:
command = ["git", "log", "%s.." % tag]
process = subprocess.run(command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
if process.returncode != 0:
print("git log failed: %s" %
process.stderr.decode("utf8").split("\n")[0])
sys.exit(1)
lines = process.stdout.decode("utf-8").split("\n")
commits = {}
prs = {}
authors = {}
commit = None commit = None
author = None author = None
merge = None merge = None
...@@ -121,23 +118,30 @@ for line in lines: ...@@ -121,23 +118,30 @@ for line in lines:
if commit: if commit:
store(commits, prs, authors, commit, author, merge, msg) store(commits, prs, authors, commit, author, merge, msg)
s = "Changes since %s" % version if prev_tag is not None:
print("%s" % s) line = "Changes for %s since %s" % (version, prev_tag[1:])
print("-" * len(s)) else:
line = "Changes since %s" % version
print("%s" % line)
print("-" * len(line))
print() print()
prs_sorted = sorted(prs.keys(), reverse=True) prs_sorted = sorted(prs.keys(), reverse=True)
for pr in prs_sorted: for pr_ref in prs_sorted:
if isinstance(prs[pr], Ref): if isinstance(prs[pr_ref], Ref):
msg = get_commit(commits, prs[pr].commit) msg = get_commit(commits, prs[pr_ref].commit)
else: else:
msg = prs[pr] msg = prs[pr_ref]
print(" - %s (#%d)" % (msg, pr)) print(" - %s (#%d)" % (msg, pr_ref))
print() print()
s = "Detailed changelog since %s by author" % version if prev_tag is not None:
print("%s" % s) line = "Detailed changelog for %s since %s by author" % (version,
print("-" * len(s)) prev_tag[1:])
else:
line = "Detailed changelog since %s by author" % version
print("%s" % line)
print("-" * len(line))
print(" %d authors, %d commits" % (len(authors), len(commits))) print(" %d authors, %d commits" % (len(authors), len(commits)))
print() print()
...@@ -147,3 +151,25 @@ for author in authors_sorted: ...@@ -147,3 +151,25 @@ for author in authors_sorted:
for commit in authors[author]: for commit in authors[author]:
print(" - %s" % commits[commit]) print(" - %s" % commits[commit])
print() print()
parser = argparse.ArgumentParser(usage="Usage: changelog [options]")
parser.add_argument("--tag", dest="tag", help="git tag")
parser.add_argument("--galaxy", dest="galaxy", action="store_true",
help="Create changelog for galaxy")
options, args = parser.parse_known_args()
if len(args) != 0:
parser.print_help()
sys.exit(1)
if options.galaxy:
# Get latest tag
tag = get_output("git describe --tag --abbrev=0")
# get number of commits since latest tag
count = get_output("git rev-list '%s'.. --count" % tag)
if count != "0":
changelog(None)
changelog(tag)
else:
changelog(options.tag)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment