Add breaking-changes section to changelog (#530)

* add breaking-changes section to changelog

* Clean up parse_by_sections

* Thank you bastelfreak and ekohl!
This commit is contained in:
Tim Meusel
2017-10-10 20:27:23 +02:00
committed by Olle Jonsson
parent d1e09f6964
commit 21ec2db39b
5 changed files with 117 additions and 27 deletions
@@ -95,12 +95,13 @@ module GitHubChangelogGenerator
# @param [Array] pull_requests
# @return [String] generated log for issues
def issues_to_log(issues, pull_requests)
log = ""
bugs_a, enhancement_a, issues_a = parse_by_sections(issues, pull_requests)
sections = parse_by_sections(issues, pull_requests)
log += generate_sub_section(enhancement_a, options[:enhancement_prefix])
log += generate_sub_section(bugs_a, options[:bug_prefix])
log += generate_sub_section(issues_a, options[:issue_prefix])
log = ""
log += generate_sub_section(sections[:breaking], options[:breaking_prefix])
log += generate_sub_section(sections[:enhancement], options[:enhancement_prefix])
log += generate_sub_section(sections[:bugs], options[:bug_prefix])
log += generate_sub_section(sections[:issues], options[:issue_prefix])
log
end
@@ -109,47 +110,69 @@ module GitHubChangelogGenerator
#
# @param [Array] issues
# @param [Array] pull_requests
# @return [Array] tuple of filtered arrays: (Bugs, Enhancements Issues)
# @return [Hash] Mapping of filtered arrays: (Bugs, Enhancements, Breaking stuff, Issues)
def parse_by_sections(issues, pull_requests)
issues_a = []
enhancement_a = []
bugs_a = []
sections = {
issues: [],
enhancements: [],
bugs: [],
breaking: []
}
issues.each do |dict|
added = false
dict["labels"].each do |label|
if options[:bug_labels].include?(label["name"])
bugs_a.push(dict)
sections[:bugs] << dict
added = true
next
end
if options[:enhancement_labels].include?(label["name"])
enhancement_a.push(dict)
elsif options[:enhancement_labels].include?(label["name"])
sections[:enhancements] << dict
added = true
elsif options[:breaking_labels].include?(label["name"])
sections[:breaking] << dict
added = true
next
end
break if added
end
issues_a.push(dict) unless added
sections[:issues] << dict unless added
end
sort_pull_requests(pull_requests, sections)
end
# This method iterates through PRs and sorts them into sections
#
# @param [Array] pull_requests
# @param [Hash] sections
# @return [Hash] sections
def sort_pull_requests(pull_requests, sections)
added_pull_requests = []
pull_requests.each do |pr|
added = false
pr["labels"].each do |label|
if options[:bug_labels].include?(label["name"])
bugs_a.push(pr)
added_pull_requests.push(pr)
next
end
if options[:enhancement_labels].include?(label["name"])
enhancement_a.push(pr)
added_pull_requests.push(pr)
next
sections[:bugs] << pr
added_pull_requests << pr
added = true
elsif options[:enhancement_labels].include?(label["name"])
sections[:enhancements] << pr
added_pull_requests << pr
added = true
elsif options[:breaking_labels].include?(label["name"])
sections[:breaking] << pr
added_pull_requests << pr
added = true
end
break if added
end
end
added_pull_requests.each { |p| pull_requests.delete(p) }
[bugs_a, enhancement_a, issues_a]
sections
end
end
end