diff --git a/lib/github_changelog_generator.rb b/lib/github_changelog_generator.rb index 9e37a75..646c20f 100755 --- a/lib/github_changelog_generator.rb +++ b/lib/github_changelog_generator.rb @@ -231,6 +231,11 @@ module GitHubChangelogGenerator def generate_log_between_tags(older_tag, newer_tag) + if newer_tag.nil? + puts "Can't find tag -> terminate" + exit 1 + end + newer_tag_time = self.get_time_of_tag(newer_tag) newer_tag_name = newer_tag['name'] @@ -243,6 +248,43 @@ module GitHubChangelogGenerator filtered_issues = delete_by_time(@issues, :closed_at, newer_tag_time, older_tag_time) end + + if @options[:filter_issues_by_milestone] + #delete excess irrelevant issues (according milestones) + filtered_issues.select! { |issue| + if issue.milestone.nil? + true + else + #check, that this milestone in tag list: + milestone_is_tag = @all_tags.find { |tag| + tag.name == issue.milestone.title + } + milestone_is_tag.nil? + end + + } + + #add missed issues (according milestones) + issues_to_add = @issues.select { |issue| + if issue.milestone.nil? + false + else + #check, that this milestone in tag list: + milestone_is_tag = @all_tags.find { |tag| + tag.name == issue.milestone.title + } + + if milestone_is_tag.nil? + false + else + issue.milestone.title == newer_tag_name + end + end + } + + filtered_issues |= issues_to_add + end + self.create_log(filtered_pull_requests, filtered_issues, newer_tag_name, newer_tag_time) end diff --git a/lib/github_changelog_generator/generator.rb b/lib/github_changelog_generator/generator.rb index 5680f41..0c08a3d 100644 --- a/lib/github_changelog_generator/generator.rb +++ b/lib/github_changelog_generator/generator.rb @@ -10,10 +10,10 @@ module GitHubChangelogGenerator merge = "#{@options[:merge_prefix]}#{encapsulated_title} [\\##{pull_request[:number]}](#{pull_request.html_url})" if @options[:author] - if !pull_request.user.nil? - merge += " ([#{pull_request.user.login}](#{pull_request.user.html_url}))\n\n" - else + if pull_request.user.nil? merge += " ({Null user})\n\n" + else + merge += " ([#{pull_request.user.login}](#{pull_request.user.html_url}))\n\n" end else merge += "\n\n" diff --git a/lib/github_changelog_generator/parser.rb b/lib/github_changelog_generator/parser.rb index 4c9c4e0..b927b9a 100644 --- a/lib/github_changelog_generator/parser.rb +++ b/lib/github_changelog_generator/parser.rb @@ -6,7 +6,7 @@ require_relative 'version' module GitHubChangelogGenerator class Parser def self.parse_options - options = {:tag1 => nil, :tag2 => nil, :format => '%d/%m/%y', :output => 'CHANGELOG.md', :labels => %w(bug enhancement), :pulls => true, :issues => true, :verbose => true, :add_issues_wo_labels => true, :merge_prefix => '*Merged pull-request:* ', :author => true, :pull_request_labels => nil} + options = {:tag1 => nil, :tag2 => nil, :format => '%d/%m/%y', :output => 'CHANGELOG.md', :labels => %w(bug enhancement), :pulls => true, :issues => true, :verbose => true, :add_issues_wo_labels => true, :merge_prefix => '*Merged pull-request:* ', :author => true, :pull_request_labels => nil, :filter_issues_by_milestone => true} parser = OptionParser.new { |opts| opts.banner = 'Usage: changelog_generator [options]' @@ -37,6 +37,9 @@ module GitHubChangelogGenerator opts.on('--[no-]pull-requests', 'Include pull-requests to changelog. Default is true') do |v| options[:pulls] = v end + opts.on('--[no-]filter-issues-by-milestone', 'Use milestone to detect when issue was resolved. Default is true') do |last| + options[:filter_issues_by_milestone] = last + end opts.on('--[no-]author', 'Add author of pull-request in the end. Default is true') do |author| options[:last] = author end