merged in the tag fixes
This commit is contained in:
parent
2405b4fb3c
commit
dbcc1cb98d
|
@ -11,7 +11,7 @@ module GitHubChangelogGenerator
|
|||
end
|
||||
|
||||
class Generator
|
||||
attr_accessor :options, :filtered_tags, :github
|
||||
attr_accessor :options, :filtered_tags, :github, :tag_section_mapping
|
||||
|
||||
# A Generator responsible for all logic, related with change log generation from ready-to-parse issues
|
||||
#
|
||||
|
|
|
@ -15,13 +15,13 @@ module GitHubChangelogGenerator
|
|||
end
|
||||
|
||||
# Async fetching of all tags dates
|
||||
def fetch_tags_dates
|
||||
def fetch_tags_dates(tags)
|
||||
print "Fetching tag dates...\r" if @options[:verbose]
|
||||
# Async fetching tags:
|
||||
threads = []
|
||||
i = 0
|
||||
all = @filtered_tags.count
|
||||
@filtered_tags.each do |tag|
|
||||
all = tags.count
|
||||
tags.each do |tag|
|
||||
print " \r"
|
||||
threads << Thread.new do
|
||||
get_time_of_tag(tag)
|
||||
|
|
|
@ -6,7 +6,6 @@ module GitHubChangelogGenerator
|
|||
# @return [String] Generated change log file
|
||||
def compound_changelog
|
||||
fetch_and_filter_tags
|
||||
sort_tags_by_date(@filtered_tags)
|
||||
fetch_issues_and_pr
|
||||
|
||||
log = ""
|
||||
|
@ -139,11 +138,9 @@ module GitHubChangelogGenerator
|
|||
|
||||
log = generate_unreleased_section
|
||||
|
||||
(1...filtered_tags.size).each do |index|
|
||||
log += generate_log_between_tags(filtered_tags[index], filtered_tags[index - 1])
|
||||
end
|
||||
if filtered_tags.any?
|
||||
log += generate_log_between_tags(nil, filtered_tags.last)
|
||||
@tag_section_mapping.each_pair do |_tag_section, left_right_tags|
|
||||
older_tag, newer_tag = left_right_tags
|
||||
log += generate_log_between_tags(older_tag, newer_tag)
|
||||
end
|
||||
|
||||
log
|
||||
|
|
|
@ -3,11 +3,34 @@ module GitHubChangelogGenerator
|
|||
class Generator
|
||||
# fetch, filter tags, fetch dates and sort them in time order
|
||||
def fetch_and_filter_tags
|
||||
@filtered_tags = get_filtered_tags(@fetcher.get_all_tags)
|
||||
fetch_tags_dates
|
||||
detect_since_tag
|
||||
detect_due_tag
|
||||
|
||||
all_tags = @fetcher.get_all_tags
|
||||
fetch_tags_dates(all_tags) # Creates a Hash @tag_times_hash
|
||||
sorted_tags = sort_tags_by_date(all_tags)
|
||||
@filtered_tags = get_filtered_tags(sorted_tags)
|
||||
|
||||
@tag_section_mapping = build_tag_section_mapping(@filtered_tags, all_tags)
|
||||
|
||||
@filtered_tags
|
||||
end
|
||||
|
||||
# Sort all tags by date
|
||||
# @param [Array] filtered_tags are the tags that need a subsection output
|
||||
# @param [Array] all_tags is the list of all tags ordered from newest -> oldest
|
||||
# @return [Hash] key is the tag to output, value is an array of [Left Tag, Right Tag]
|
||||
# PRs to include in this section will be >= [Left Tag Date] and <= [Right Tag Date]
|
||||
def build_tag_section_mapping(filtered_tags, all_tags)
|
||||
tag_mapping = {}
|
||||
filtered_tags.each do |tag|
|
||||
older_tag_idx = all_tags.index(tag) + 1
|
||||
older_tag = all_tags[older_tag_idx]
|
||||
tag_mapping[tag] = [older_tag, tag]
|
||||
end
|
||||
tag_mapping
|
||||
end
|
||||
|
||||
# Sort all tags by date, newest to oldest
|
||||
def sort_tags_by_date(tags)
|
||||
puts "Sorting tags..." if @options[:verbose]
|
||||
tags.sort_by! do |x|
|
||||
|
@ -58,6 +81,10 @@ module GitHubChangelogGenerator
|
|||
@since_tag ||= @options.fetch(:since_tag) { version_of_first_item }
|
||||
end
|
||||
|
||||
def detect_due_tag
|
||||
@due_tag ||= @options.fetch(:due_tag, nil)
|
||||
end
|
||||
|
||||
def version_of_first_item
|
||||
return unless File.file?(@options[:base].to_s)
|
||||
|
||||
|
@ -70,6 +97,7 @@ module GitHubChangelogGenerator
|
|||
# @return [Array]
|
||||
def get_filtered_tags(all_tags)
|
||||
filtered_tags = filter_since_tag(all_tags)
|
||||
filtered_tags = filter_due_tag(filtered_tags)
|
||||
filtered_tags = filter_between_tags(filtered_tags)
|
||||
filter_excluded_tags(filtered_tags)
|
||||
end
|
||||
|
@ -98,13 +126,12 @@ module GitHubChangelogGenerator
|
|||
# @return [Array] filtered tags according :due_tag option
|
||||
def filter_due_tag(all_tags)
|
||||
filtered_tags = all_tags
|
||||
tag = @options[:due_tag]
|
||||
tag = detect_due_tag
|
||||
if tag
|
||||
if all_tags.any? && all_tags.map { |t| t["name"] }.include?(tag)
|
||||
idx = all_tags.index { |t| t["name"] == tag }
|
||||
last_index = all_tags.count - 1
|
||||
filtered_tags = if idx > 0 && idx < last_index
|
||||
all_tags[idx + 1..last_index]
|
||||
filtered_tags = if idx > 0
|
||||
all_tags[(idx + 1)..-1]
|
||||
else
|
||||
[]
|
||||
end
|
||||
|
@ -119,9 +146,11 @@ module GitHubChangelogGenerator
|
|||
# @return [Array] filtered tags according :between_tags option
|
||||
def filter_between_tags(all_tags)
|
||||
filtered_tags = all_tags
|
||||
tag_names = filtered_tags.map(&:name)
|
||||
|
||||
if @options[:between_tags]
|
||||
@options[:between_tags].each do |tag|
|
||||
unless all_tags.map { |t| t["name"] }.include? tag
|
||||
unless tag_names.include? tag
|
||||
Helper.log.warn "Warning: can't find tag #{tag}, specified with --between-tags option."
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user