Merge pull request #320 from ITV/filter-tags

Added tag exclusion with a filter (string or regex)
This commit is contained in:
Petr Korolev
2016-03-28 13:04:06 +03:00
3 changed files with 38 additions and 11 deletions

View File

@@ -129,26 +129,34 @@ module GitHubChangelogGenerator
end
# @param [Array] all_tags all tags
# @return [Array] filtered tags according :exclude_tags option
# @return [Array] filtered tags according :exclude_tags or :exclude_tags_regex option
def filter_excluded_tags(all_tags)
return all_tags unless @options[:exclude_tags]
apply_exclude_tags(all_tags)
if @options[:exclude_tags]
apply_exclude_tags(all_tags)
elsif @options[:exclude_tags_regex]
apply_exclude_tags_regex(all_tags)
else
all_tags
end
end
private
def apply_exclude_tags(all_tags)
if @options[:exclude_tags].is_a?(Regexp)
filter_tags_with_regex(all_tags)
filter_tags_with_regex(all_tags, @options[:exclude_tags])
else
filter_exact_tags(all_tags)
end
end
def filter_tags_with_regex(all_tags)
def apply_exclude_tags_regex(all_tags)
filter_tags_with_regex(all_tags, Regexp.new(@options[:exclude_tags_regex]))
end
def filter_tags_with_regex(all_tags, regex)
warn_if_nonmatching_regex(all_tags)
all_tags.reject { |tag| @options[:exclude_tags] =~ tag.name }
all_tags.reject { |tag| regex =~ tag.name }
end
def filter_exact_tags(all_tags)