diff --git a/README.md b/README.md index 5b441910f..29e36ed03 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,17 @@ So, if you got error like this: It's time to create this token or wait for 1 hour before GitHub reset the counter for your IP. + +## Migrating from a manual changelog + +Knowing how dedicated you are to your project, you probably haven't been waiting for github-changelog-generator to keep a changelog, +but you most likely wouln't like to have to open issues and PRs for all past features listed in your historic changelog. + +That's where `--base` comes handy. This option lets you pass a static changelog to be appended at the end of the generated entries. + +If you have a `HISTORY.md` file in your project, it will automatically be picked as the static historical changelog and appended. + + ##Features and advantages of this project - Generate canonical, neat change log file, followed by [basic change log guidelines](http://keepachangelog.com/) :gem: - Possible to generate **Unreleased** changes (closed issues that have not released yet) :dizzy: diff --git a/lib/github_changelog_generator/generator/generator_generation.rb b/lib/github_changelog_generator/generator/generator_generation.rb index 7e8f7a2f6..a3dc98638 100644 --- a/lib/github_changelog_generator/generator/generator_generation.rb +++ b/lib/github_changelog_generator/generator/generator_generation.rb @@ -16,6 +16,8 @@ def compound_changelog log += generate_log_for_all_tags end + log += File.read(@options[:base]) if File.file?(@options[:base]) + log += "\n\n\\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*" @log = log end diff --git a/lib/github_changelog_generator/generator/generator_tags.rb b/lib/github_changelog_generator/generator/generator_tags.rb index 81c446639..bdc078d41 100644 --- a/lib/github_changelog_generator/generator/generator_tags.rb +++ b/lib/github_changelog_generator/generator/generator_tags.rb @@ -52,6 +52,14 @@ def detect_link_tag_time(newer_tag) [newer_tag_link, newer_tag_name, newer_tag_time] end + def detect_since_tag + if @options[:base] && File.file?(@options[:base]) + reader = GitHubChangelogGenerator::Reader.new + content = reader.read(@options[:base]) + return content[0]["version"] if content + end + end + # Return tags after filtering tags in lists provided by option: --between-tags & --exclude-tags # # @return [Array] @@ -64,6 +72,7 @@ def get_filtered_tags(all_tags) def filter_since_tag(all_tags) filtered_tags = all_tags tag = @options[:since_tag] + tag ||= detect_since_tag if tag if all_tags.map(&:name).include? tag idx = all_tags.index { |t| t.name == tag } diff --git a/lib/github_changelog_generator/parser.rb b/lib/github_changelog_generator/parser.rb index ff1b6f942..72dc79e4c 100644 --- a/lib/github_changelog_generator/parser.rb +++ b/lib/github_changelog_generator/parser.rb @@ -50,6 +50,9 @@ def self.setup_parser(options) opts.on("-o", "--output [NAME]", "Output file. Default is CHANGELOG.md") do |last| options[:output] = last end + opts.on("-b", "--base [NAME]", "Optional base file to append generated changes to.") do |last| + options[:base] = last + end opts.on("--bugs-label [LABEL]", "Setup custom label for bug-fixes section. Default is \"**Fixed bugs:**""") do |v| options[:bug_prefix] = v end @@ -153,6 +156,7 @@ def self.get_default_options tag2: nil, date_format: "%Y-%m-%d", output: "CHANGELOG.md", + base: "HISTORY.md", issues: true, add_issues_wo_labels: true, add_pr_wo_labels: true,