diff --git a/README.md b/README.md index aa2a2a2..5027ded 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,14 @@ 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. ### Rake task diff --git a/lib/github_changelog_generator/generator/generator_generation.rb b/lib/github_changelog_generator/generator/generator_generation.rb index 200cd4e..1cd0349 100644 --- a/lib/github_changelog_generator/generator/generator_generation.rb +++ b/lib/github_changelog_generator/generator/generator_generation.rb @@ -16,6 +16,8 @@ module GitHubChangelogGenerator 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 81c4466..bdc078d 100644 --- a/lib/github_changelog_generator/generator/generator_tags.rb +++ b/lib/github_changelog_generator/generator/generator_tags.rb @@ -52,6 +52,14 @@ module GitHubChangelogGenerator [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 @@ module GitHubChangelogGenerator 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 e90912e..0154864 100644 --- a/lib/github_changelog_generator/parser.rb +++ b/lib/github_changelog_generator/parser.rb @@ -50,6 +50,9 @@ module GitHubChangelogGenerator 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 @@ -156,6 +159,7 @@ module GitHubChangelogGenerator 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,