Compare commits

..

55 Commits

Author SHA1 Message Date
Petr Korolev
35d520d251 Merge branch 'release/1.8.2' 2015-08-26 17:02:02 +03:00
Petr Korolev
1589df3959 Update gemspec to version 1.8.2 2015-08-26 17:02:00 +03:00
Petr Korolev
a0779a5811 This fix #270 2015-08-26 17:01:18 +03:00
Petr Korolev
c611e907e0 Merge branch 'hotfix/update-changelog' into develop 2015-08-25 17:33:34 +03:00
Petr Korolev
42c94c4dd2 Merge branch 'hotfix/update-changelog' 2015-08-25 17:33:33 +03:00
Petr Korolev
16f01dbda1 resolve 2015-08-25 17:33:22 +03:00
Petr Korolev
f285176e25 Update changelog for version 1.8.1 2015-08-25 17:32:45 +03:00
Petr Korolev
ca1ae124af Merge branch 'release/1.8.1' into develop 2015-08-25 17:31:57 +03:00
Petr Korolev
672c89dcc8 Merge branch 'release/1.8.1' 2015-08-25 17:31:56 +03:00
Petr Korolev
5a5de9ee4a Update gemspec to version 1.8.1 2015-08-25 17:31:54 +03:00
Petr Korolev
7e21aacecc simpify expressin & update change log 2015-08-25 17:31:05 +03:00
Petr Korolev
a9f50cd82e Update README.md 2015-08-25 17:31:05 +03:00
Petr Korolev
0b0a762a80 update change log 2015-08-25 17:31:05 +03:00
Raphaël Pinson
0fae7e0f9e Use since_tag as default for older_tag 2015-08-25 17:31:05 +03:00
Raphaël Pinson
953d2813fb Honor labels in PRs, fix #266 2015-08-25 17:31:04 +03:00
Petr Korolev
abd7175eef simpify expressin & update change log 2015-08-25 17:28:07 +03:00
Petr Korolev
8fab94702f Merge pull request #266 from raphink/dev/pr_labels
Honor labels for Pull Requests
2015-08-25 17:27:39 +03:00
Petr Korolev
ef332dd02b Update README.md 2015-08-25 16:56:52 +03:00
Petr Korolev
83ae430dd8 update change log 2015-08-25 16:08:58 +03:00
Petr Korolev
8c0974200c Merge pull request #267 from raphink/dev/older_tag
Use since_tag as default for older_tag
2015-08-25 16:08:06 +03:00
Petr Korolev
28e3ed2500 Merge branch 'develop' 2015-08-25 15:25:00 +03:00
Petr Korolev
1bf5644a72 Merge branch 'feature/fix-262' into develop 2015-08-25 15:15:41 +03:00
Petr Korolev
bc37d0277b update change log 2015-08-25 15:15:30 +03:00
Petr Korolev
c4846b7ef9 Merge branch 'develop' into feature/fix-262 2015-08-25 15:10:04 +03:00
Petr Korolev
d09dad30f4 update change log 2015-08-25 15:08:09 +03:00
Raphaël Pinson
31e98fbc41 Use since_tag as default for older_tag 2015-08-25 13:55:29 +02:00
Petr Korolev
82dd0b3cce This commit close #262 2015-08-25 14:27:40 +03:00
Petr Korolev
1ae86e3cb2 rename and convert string to sybol 2015-08-25 13:14:04 +03:00
Raphaël Pinson
b3eea83ae1 Honor labels in PRs, fix #266 2015-08-25 10:28:27 +02:00
Petr Korolev
7e4d546f60 Merge branch 'hotfix/update-changelog' into develop 2015-08-24 18:31:55 +03:00
Petr Korolev
be62b92fa9 Merge branch 'hotfix/update-changelog' 2015-08-24 18:31:53 +03:00
Petr Korolev
0b6d751388 Update changelog for version 1.8.0 2015-08-24 18:31:31 +03:00
Petr Korolev
410921f673 Merge branch 'release/1.8.0' into develop 2015-08-24 17:55:25 +03:00
Petr Korolev
8b49b5ac0c Merge branch 'release/1.8.0' 2015-08-24 17:55:25 +03:00
Petr Korolev
d7b5d77bbf Update gemspec to version 1.8.0 2015-08-24 17:55:23 +03:00
Petr Korolev
ddf2624bf9 Merge branch 'develop' 2015-08-24 17:53:06 +03:00
Petr Korolev
80b40d1b36 Merge branch 'feature/due-tag' into develop 2015-08-24 17:52:09 +03:00
Petr Korolev
e8e4628261 Merge branch 'master' into develop 2015-08-24 17:51:14 +03:00
Petr Korolev
4261c3494e Add due-tag option and tests 2015-08-24 17:29:07 +03:00
Petr Korolev
d138644925 add docs 2015-08-24 16:47:37 +03:00
Petr Korolev
0301dcb672 Merge pull request #264 from raphink/dev/release_url
Add release_url to rake task options
2015-08-24 16:01:42 +03:00
Raphaël Pinson
73d4415e14 Add release_url to rake task options 2015-08-24 14:55:57 +02:00
Petr Korolev
ed179ed7be Merge branch 'master' into develop 2015-08-24 14:54:53 +03:00
Petr Korolev
0930cfdd88 Update README.md 2015-08-24 14:54:41 +03:00
Petr Korolev
c140349a73 git push origin masterMerge branch 'raphink-dev/no_replace' 2015-08-24 14:43:39 +03:00
Petr Korolev
8c35215697 Merge branch 'dev/no_replace' of https://github.com/raphink/github-changelog-generator into raphink-dev/no_replace 2015-08-24 14:43:05 +03:00
Petr Korolev
840b6666e0 Merge pull request #263 from skywinder/revert-261-patch-1
Revert "Fixed Readme, I think"
2015-08-24 14:38:34 +03:00
Petr Korolev
7b7c6fc793 Revert "Fixed Readme, I think" 2015-08-24 14:28:22 +03:00
Petr Korolev
2357875c13 Merge pull request #261 from dpwspoon/patch-1
Fixed Readme, I think
2015-08-24 14:05:22 +03:00
David Witherspoon
cac840c57d Fixed Readme, I think
I don't know where a 16 digit token comes from.  But the 40 digit token works.  So I think this is a typo.
2015-08-21 09:31:01 -07:00
Raphaël Pinson
9acca33bc2 Test if @options[:base] is set 2015-08-12 16:35:47 +02:00
Raphaël Pinson
bfae7b9a45 Auto detect since tag from base file 2015-08-05 10:57:08 +02:00
Raphaël Pinson
4202b95076 Add --base option 2015-08-05 10:40:28 +02:00
Petr Korolev
b6efcfced8 Merge branch 'hotfix/update-changelog' into develop 2015-07-16 17:26:54 +03:00
Petr Korolev
63e91d8e72 Merge branch 'release/1.7.0' into develop 2015-07-16 17:22:58 +03:00
14 changed files with 410 additions and 254 deletions

View File

@@ -1,14 +1,32 @@
# Change Log # Change Log
## [Unreleased](https://github.com/skywinder/github-changelog-generator/tree/HEAD) ## [1.8.1](https://github.com/skywinder/github-changelog-generator/tree/1.8.1) (2015-08-25)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.8.0...1.8.1)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.7.0...HEAD) **Implemented enhancements:**
- Honor labels for Pull Requests [\#266](https://github.com/skywinder/github-changelog-generator/pull/266) ([raphink](https://github.com/raphink))
**Merged pull requests:** **Merged pull requests:**
- Fix issue with missing events \(in case of events for issue \>30\) [\#268](https://github.com/skywinder/github-changelog-generator/pull/268) ([skywinder](https://github.com/skywinder))
- Use since\_tag as default for older\_tag [\#267](https://github.com/skywinder/github-changelog-generator/pull/267) ([raphink](https://github.com/raphink))
## [1.8.0](https://github.com/skywinder/github-changelog-generator/tree/1.8.0) (2015-08-24)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.7.0...1.8.0)
**Implemented enhancements:**
- Generate change log since/due specific tag [\#254](https://github.com/skywinder/github-changelog-generator/issues/254)
- Add --base option [\#258](https://github.com/skywinder/github-changelog-generator/pull/258) ([raphink](https://github.com/raphink))
**Merged pull requests:**
- Add `--due-tag` option [\#265](https://github.com/skywinder/github-changelog-generator/pull/265) ([skywinder](https://github.com/skywinder))
- Add release\_url to rake task options [\#264](https://github.com/skywinder/github-changelog-generator/pull/264) ([raphink](https://github.com/raphink))
- Add a rake task [\#260](https://github.com/skywinder/github-changelog-generator/pull/260) ([raphink](https://github.com/raphink)) - Add a rake task [\#260](https://github.com/skywinder/github-changelog-generator/pull/260) ([raphink](https://github.com/raphink))
- Add release\_url option [\#259](https://github.com/skywinder/github-changelog-generator/pull/259) ([raphink](https://github.com/raphink)) - Add release\_url option [\#259](https://github.com/skywinder/github-changelog-generator/pull/259) ([raphink](https://github.com/raphink))
- Add --since-tag, close [\#257](https://github.com/skywinder/github-changelog-generator/pull/257) ([raphink](https://github.com/raphink)) - Add --since-tag [\#257](https://github.com/skywinder/github-changelog-generator/pull/257) ([raphink](https://github.com/raphink))
## [1.7.0](https://github.com/skywinder/github-changelog-generator/tree/1.7.0) (2015-07-16) ## [1.7.0](https://github.com/skywinder/github-changelog-generator/tree/1.7.0) (2015-07-16)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.6.2...1.7.0) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.6.2...1.7.0)
@@ -89,6 +107,7 @@
- Parsing of existing Change Log file [\#212](https://github.com/skywinder/github-changelog-generator/issues/212) - Parsing of existing Change Log file [\#212](https://github.com/skywinder/github-changelog-generator/issues/212)
- Warn users about 0 tags in repo. [\#208](https://github.com/skywinder/github-changelog-generator/issues/208) - Warn users about 0 tags in repo. [\#208](https://github.com/skywinder/github-changelog-generator/issues/208)
- Cleanup [\#220](https://github.com/skywinder/github-changelog-generator/pull/220) ([tuexss](https://github.com/tuexss))
**Closed issues:** **Closed issues:**
@@ -98,7 +117,6 @@
- Implement fetcher class [\#227](https://github.com/skywinder/github-changelog-generator/pull/227) ([skywinder](https://github.com/skywinder)) - Implement fetcher class [\#227](https://github.com/skywinder/github-changelog-generator/pull/227) ([skywinder](https://github.com/skywinder))
- Add coveralls integration [\#223](https://github.com/skywinder/github-changelog-generator/pull/223) ([skywinder](https://github.com/skywinder)) - Add coveralls integration [\#223](https://github.com/skywinder/github-changelog-generator/pull/223) ([skywinder](https://github.com/skywinder))
- Cleanup [\#220](https://github.com/skywinder/github-changelog-generator/pull/220) ([tuexss](https://github.com/tuexss))
- Rspec & rubocop integration [\#217](https://github.com/skywinder/github-changelog-generator/pull/217) ([skywinder](https://github.com/skywinder)) - Rspec & rubocop integration [\#217](https://github.com/skywinder/github-changelog-generator/pull/217) ([skywinder](https://github.com/skywinder))
- Implement Reader class to parse ChangeLog.md [\#216](https://github.com/skywinder/github-changelog-generator/pull/216) ([estahn](https://github.com/estahn)) - Implement Reader class to parse ChangeLog.md [\#216](https://github.com/skywinder/github-changelog-generator/pull/216) ([estahn](https://github.com/estahn))
- Relatively require github\_changelog\_generator library [\#207](https://github.com/skywinder/github-changelog-generator/pull/207) ([sneal](https://github.com/sneal)) - Relatively require github\_changelog\_generator library [\#207](https://github.com/skywinder/github-changelog-generator/pull/207) ([sneal](https://github.com/sneal))
@@ -114,7 +132,7 @@
## [1.3.10](https://github.com/skywinder/github-changelog-generator/tree/1.3.10) (2015-03-18) ## [1.3.10](https://github.com/skywinder/github-changelog-generator/tree/1.3.10) (2015-03-18)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.9...1.3.10) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.9...1.3.10)
**Merged pull requests:** **Fixed bugs:**
- Fix termination in case of empty unreleased section with `--unreleased-only` option. [\#70](https://github.com/skywinder/github-changelog-generator/pull/70) ([skywinder](https://github.com/skywinder)) - Fix termination in case of empty unreleased section with `--unreleased-only` option. [\#70](https://github.com/skywinder/github-changelog-generator/pull/70) ([skywinder](https://github.com/skywinder))
@@ -125,7 +143,7 @@
- Improve method of detecting owner and repository [\#63](https://github.com/skywinder/github-changelog-generator/issues/63) - Improve method of detecting owner and repository [\#63](https://github.com/skywinder/github-changelog-generator/issues/63)
**Merged pull requests:** **Fixed bugs:**
- Resolved concurrency problem in case of issues \> 2048 [\#65](https://github.com/skywinder/github-changelog-generator/pull/65) ([skywinder](https://github.com/skywinder)) - Resolved concurrency problem in case of issues \> 2048 [\#65](https://github.com/skywinder/github-changelog-generator/pull/65) ([skywinder](https://github.com/skywinder))
@@ -199,7 +217,7 @@
## [1.2.7](https://github.com/skywinder/github-changelog-generator/tree/1.2.7) (2015-01-26) ## [1.2.7](https://github.com/skywinder/github-changelog-generator/tree/1.2.7) (2015-01-26)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.6...1.2.7) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.6...1.2.7)
**Merged pull requests:** **Implemented enhancements:**
- Add compare link between older version and newer version [\#46](https://github.com/skywinder/github-changelog-generator/pull/46) ([sue445](https://github.com/sue445)) - Add compare link between older version and newer version [\#46](https://github.com/skywinder/github-changelog-generator/pull/46) ([sue445](https://github.com/sue445))
@@ -220,10 +238,10 @@
**Fixed bugs:** **Fixed bugs:**
- Error when trying to generate log for repo without tags [\#32](https://github.com/skywinder/github-changelog-generator/issues/32) - Error when trying to generate log for repo without tags [\#32](https://github.com/skywinder/github-changelog-generator/issues/32)
- PrettyPrint class is included using lowercase 'pp' [\#43](https://github.com/skywinder/github-changelog-generator/pull/43) ([schwing](https://github.com/schwing))
**Merged pull requests:** **Merged pull requests:**
- PrettyPrint class is included using lowercase 'pp' [\#43](https://github.com/skywinder/github-changelog-generator/pull/43) ([schwing](https://github.com/schwing))
- support enterprise github via command line options [\#42](https://github.com/skywinder/github-changelog-generator/pull/42) ([glenlovett](https://github.com/glenlovett)) - support enterprise github via command line options [\#42](https://github.com/skywinder/github-changelog-generator/pull/42) ([glenlovett](https://github.com/glenlovett))
## [1.2.4](https://github.com/skywinder/github-changelog-generator/tree/1.2.4) (2014-12-16) ## [1.2.4](https://github.com/skywinder/github-changelog-generator/tree/1.2.4) (2014-12-16)
@@ -333,6 +351,7 @@
- Add support for fixed issues and implemented enchanments. [\#6](https://github.com/skywinder/github-changelog-generator/issues/6) - Add support for fixed issues and implemented enchanments. [\#6](https://github.com/skywinder/github-changelog-generator/issues/6)
- Implement option to specify output filename [\#4](https://github.com/skywinder/github-changelog-generator/issues/4) - Implement option to specify output filename [\#4](https://github.com/skywinder/github-changelog-generator/issues/4)
- Implement support of different tags. [\#8](https://github.com/skywinder/github-changelog-generator/pull/8) ([skywinder](https://github.com/skywinder))
**Fixed bugs:** **Fixed bugs:**
@@ -340,7 +359,6 @@
**Merged pull requests:** **Merged pull requests:**
- Implement support of different tags. [\#8](https://github.com/skywinder/github-changelog-generator/pull/8) ([skywinder](https://github.com/skywinder))
- Add support for issues in CHANGELOG [\#7](https://github.com/skywinder/github-changelog-generator/pull/7) ([skywinder](https://github.com/skywinder)) - Add support for issues in CHANGELOG [\#7](https://github.com/skywinder/github-changelog-generator/pull/7) ([skywinder](https://github.com/skywinder))
## [0.1.0](https://github.com/skywinder/github-changelog-generator/tree/0.1.0) (2014-11-07) ## [0.1.0](https://github.com/skywinder/github-changelog-generator/tree/0.1.0) (2014-11-07)

View File

@@ -1,7 +1,7 @@
PATH PATH
remote: . remote: .
specs: specs:
github_changelog_generator (1.7.0) github_changelog_generator (1.8.1)
colorize (~> 0.7) colorize (~> 0.7)
github_api (~> 0.12) github_api (~> 0.12)
@@ -29,13 +29,13 @@ GEM
unf (>= 0.0.5, < 1.0.0) unf (>= 0.0.5, < 1.0.0)
faraday (0.9.1) faraday (0.9.1)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
github_api (0.12.3) github_api (0.12.4)
addressable (~> 2.3) addressable (~> 2.3)
descendants_tracker (~> 0.0.4) descendants_tracker (~> 0.0.4)
faraday (~> 0.8, < 0.10) faraday (~> 0.8, < 0.10)
hashie (>= 3.3) hashie (>= 3.4)
multi_json (>= 1.7.5, < 2.0) multi_json (>= 1.7.5, < 2.0)
nokogiri (~> 1.6.3) nokogiri (~> 1.6.6)
oauth2 oauth2
hashie (3.4.2) hashie (3.4.2)
http-cookie (1.0.2) http-cookie (1.0.2)
@@ -112,3 +112,6 @@ DEPENDENCIES
rspec (~> 3.2) rspec (~> 3.2)
rubocop (~> 0.31) rubocop (~> 0.31)
simplecov (~> 0.10) simplecov (~> 0.10)
BUNDLED WITH
1.10.6

View File

@@ -92,7 +92,7 @@ Since GitHub allows you to make only 50 requests without authentication it's rec
And: And:
- Run with key `-t [your-16-digit-token]` - Run with key `-t [your-40-digit-token]`
- Or set environment variable `CHANGELOG_GITHUB_TOKEN` and specify there your token. - Or set environment variable `CHANGELOG_GITHUB_TOKEN` and specify there your token.
i.e. add to your `~/.bash_profile` or `~/.zshrc` or any other place to load ENV variables string : i.e. add to your `~/.bash_profile` or `~/.zshrc` or any other place to load ENV variables string :
@@ -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. 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 ### Rake task
@@ -203,6 +211,8 @@ If you're seeing this warning:
6. Create a new Pull Request 6. Create a new Pull Request
7. Profit! :white_check_mark: 7. Profit! :white_check_mark:
*To test change log workflow you can use [test repo](https://github.com/skywinder/changelog_test/)*
## License ## License
Github Changelog Generator is released under the [MIT License](http://www.opensource.org/licenses/MIT). Github Changelog Generator is released under the [MIT License](http://www.opensource.org/licenses/MIT).

View File

@@ -7,6 +7,7 @@
**Implemented enhancements:** **Implemented enhancements:**
- Enchancment [\#9](https://github.com/skywinder/changelog_test/issues/9) - Enchancment [\#9](https://github.com/skywinder/changelog_test/issues/9)
- PR with enhancement label [\#16](https://github.com/skywinder/changelog_test/pull/16) ([skywinder](https://github.com/skywinder))
**Fixed bugs:** **Fixed bugs:**
@@ -21,6 +22,7 @@
**Merged pull requests:** **Merged pull requests:**
- This a PR with a lot of comments and events [\#17](https://github.com/skywinder/changelog_test/pull/17) ([skywinder](https://github.com/skywinder))
- This PR closes 14 from commit [\#15](https://github.com/skywinder/changelog_test/pull/15) ([skywinder](https://github.com/skywinder)) - This PR closes 14 from commit [\#15](https://github.com/skywinder/changelog_test/pull/15) ([skywinder](https://github.com/skywinder))
- This PR to close \#12 from body [\#13](https://github.com/skywinder/changelog_test/pull/13) ([skywinder](https://github.com/skywinder)) - This PR to close \#12 from body [\#13](https://github.com/skywinder/changelog_test/pull/13) ([skywinder](https://github.com/skywinder))

View File

@@ -163,10 +163,13 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
issues_slice.each do |issue| issues_slice.each do |issue|
threads << Thread.new do threads << Thread.new do
begin begin
obj = @github.issues.events.list user: @options[:user], response = @github.issues.events.list user: @options[:user],
repo: @options[:project], repo: @options[:project],
issue_number: issue["number"] issue_number: issue["number"]
issue[:events] = obj.body issue[:events] = []
response.each_page do |page|
issue[:events].concat(page)
end
rescue rescue
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow
end end

View File

@@ -66,7 +66,7 @@ module GitHubChangelogGenerator
if @options[:issues] if @options[:issues]
# Generate issues: # Generate issues:
log += issues_to_log(issues) log += issues_to_log(issues, pull_requests)
end end
if @options[:pulls] if @options[:pulls]
@@ -77,13 +77,14 @@ module GitHubChangelogGenerator
log log
end end
# Generate ready-to-paste log from list of issues. # Generate ready-to-paste log from list of issues and pull requests.
# #
# @param [Array] issues # @param [Array] issues
# @param [Array] pull_requests
# @return [String] generated log for issues # @return [String] generated log for issues
def issues_to_log(issues) def issues_to_log(issues, pull_requests)
log = "" log = ""
bugs_a, enhancement_a, issues_a = parse_by_sections(issues) bugs_a, enhancement_a, issues_a = parse_by_sections(issues, pull_requests)
log += generate_sub_section(enhancement_a, @options[:enhancement_prefix]) log += generate_sub_section(enhancement_a, @options[:enhancement_prefix])
log += generate_sub_section(bugs_a, @options[:bug_prefix]) log += generate_sub_section(bugs_a, @options[:bug_prefix])
@@ -95,8 +96,9 @@ module GitHubChangelogGenerator
# (bugs, features, or just closed issues) by labels # (bugs, features, or just closed issues) by labels
# #
# @param [Array] issues # @param [Array] issues
# @param [Array] pull_requests
# @return [Array] tuple of filtered arrays: (Bugs, Enhancements Issues) # @return [Array] tuple of filtered arrays: (Bugs, Enhancements Issues)
def parse_by_sections(issues) def parse_by_sections(issues, pull_requests)
issues_a = [] issues_a = []
enhancement_a = [] enhancement_a = []
bugs_a = [] bugs_a = []
@@ -117,6 +119,24 @@ module GitHubChangelogGenerator
end end
issues_a.push dict unless added issues_a.push dict unless added
end end
pull_requests.each do |dict|
added = false
dict.labels.each do |label|
if @options[:bug_labels].include? label.name
bugs_a.push dict
added = true
next
end
if @options[:enhancement_labels].include? label.name
enhancement_a.push dict
added = true
next
end
end
pull_requests.delete(dict) if added
end
[bugs_a, enhancement_a, issues_a] [bugs_a, enhancement_a, issues_a]
end end
end end

View File

@@ -48,11 +48,11 @@ module GitHubChangelogGenerator
# Fill :actual_date parameter of specified issue by closed date of the commit, if it was closed by commit. # Fill :actual_date parameter of specified issue by closed date of the commit, if it was closed by commit.
# @param [Hash] issue # @param [Hash] issue
def find_closed_date_by_commit(issue) def find_closed_date_by_commit(issue)
unless issue["events"].nil? unless issue[:events].nil?
# if it's PR -> then find "merged event", in case of usual issue -> fond closed date # if it's PR -> then find "merged event", in case of usual issue -> fond closed date
compare_string = issue[:merged_at].nil? ? "closed" : "merged" compare_string = issue[:merged_at].nil? ? "closed" : "merged"
# reverse! - to find latest closed event. (event goes in date order) # reverse! - to find latest closed event. (event goes in date order)
issue["events"].reverse!.each do |event| issue[:events].reverse!.each do |event|
if event[:event].eql? compare_string if event[:event].eql? compare_string
set_date_from_event(event, issue) set_date_from_event(event, issue)
break break

View File

@@ -16,6 +16,8 @@ module GitHubChangelogGenerator
log += generate_log_for_all_tags log += generate_log_for_all_tags
end 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 += "\n\n\\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*"
@log = log @log = log
end end
@@ -49,9 +51,8 @@ module GitHubChangelogGenerator
def generate_sub_section(issues, prefix) def generate_sub_section(issues, prefix)
log = "" log = ""
log += "#{prefix}\n\n" if options[:simple_list] != true && issues.any?
if issues.any? if issues.any?
log += "#{prefix}\n\n" unless options[:simple_list]
issues.each do |issue| issues.each do |issue|
merge_string = get_string_for_issue(issue) merge_string = get_string_for_issue(issue)
log += "- #{merge_string}\n" log += "- #{merge_string}\n"
@@ -101,7 +102,7 @@ module GitHubChangelogGenerator
def generate_log_between_tags(older_tag, newer_tag) def generate_log_between_tags(older_tag, newer_tag)
filtered_issues, filtered_pull_requests = filter_issues_for_tags(newer_tag, older_tag) filtered_issues, filtered_pull_requests = filter_issues_for_tags(newer_tag, older_tag)
older_tag_name = older_tag.nil? ? nil : older_tag["name"] older_tag_name = older_tag.nil? ? detect_since_tag : older_tag["name"]
if newer_tag.nil? && filtered_issues.empty? && filtered_pull_requests.empty? if newer_tag.nil? && filtered_issues.empty? && filtered_pull_requests.empty?
# do not generate empty unreleased section # do not generate empty unreleased section
@@ -115,7 +116,7 @@ module GitHubChangelogGenerator
# #
# @return [Array] filtered issues and pull requests # @return [Array] filtered issues and pull requests
def filter_issues_for_tags(newer_tag, older_tag) def filter_issues_for_tags(newer_tag, older_tag)
filtered_pull_requests = delete_by_time(@pull_requests, :merged_at, older_tag, newer_tag) filtered_pull_requests = delete_by_time(@pull_requests, :actual_date, older_tag, newer_tag)
filtered_issues = delete_by_time(@issues, :actual_date, older_tag, newer_tag) filtered_issues = delete_by_time(@issues, :actual_date, older_tag, newer_tag)
newer_tag_name = newer_tag.nil? ? nil : newer_tag["name"] newer_tag_name = newer_tag.nil? ? nil : newer_tag["name"]

View File

@@ -63,21 +63,21 @@ module GitHubChangelogGenerator
end end
# Method filter issues, that belong only specified tag range # Method filter issues, that belong only specified tag range
# @param [Array] array of issues to filter # @param [Array] issues issues to filter
# @param [Symbol] hash_key key of date value default is :actual_date # @param [Symbol] hash_key key of date value default is :actual_date
# @param [String] older_tag all issues before this tag date will be excluded. May be nil, if it's first tag # @param [String] older_tag all issues before this tag date will be excluded. May be nil, if it's first tag
# @param [String] newer_tag all issue after this tag will be excluded. May be nil for unreleased section # @param [String] newer_tag all issue after this tag will be excluded. May be nil for unreleased section
# @return [Array] filtered issues # @return [Array] filtered issues
def delete_by_time(array, hash_key = :actual_date, older_tag = nil, newer_tag = nil) def delete_by_time(issues, hash_key = :actual_date, older_tag = nil, newer_tag = nil)
# in case if not tags specified - return unchanged array # in case if not tags specified - return unchanged array
return array if older_tag.nil? && newer_tag.nil? return issues if older_tag.nil? && newer_tag.nil?
newer_tag_time = newer_tag && get_time_of_tag(newer_tag) newer_tag_time = newer_tag && get_time_of_tag(newer_tag)
older_tag_time = older_tag && get_time_of_tag(older_tag) older_tag_time = older_tag && get_time_of_tag(older_tag)
array.select do |req| issues.select do |issue|
if req[hash_key] if issue[hash_key]
time = Time.parse(req[hash_key]).utc time = Time.parse(issue[hash_key]).utc
tag_in_range_old = tag_newer_old_tag?(older_tag_time, time) tag_in_range_old = tag_newer_old_tag?(older_tag_time, time)

View File

@@ -52,6 +52,17 @@ module GitHubChangelogGenerator
[newer_tag_link, newer_tag_name, newer_tag_time] [newer_tag_link, newer_tag_name, newer_tag_time]
end end
# @return [Object] try to find newest tag using #Reader and :base option if specified otherwise returns nil
def detect_since_tag
@since_tag ||= @options[:since_tag]
if @since_tag.nil? && @options[:base] && File.file?(@options[:base])
reader = GitHubChangelogGenerator::Reader.new
content = reader.read(@options[:base])
@since_tag = content[0]["version"] if content
end
@since_tag
end
# Return tags after filtering tags in lists provided by option: --between-tags & --exclude-tags # Return tags after filtering tags in lists provided by option: --between-tags & --exclude-tags
# #
# @return [Array] # @return [Array]
@@ -61,9 +72,11 @@ module GitHubChangelogGenerator
filter_excluded_tags(filtered_tags) filter_excluded_tags(filtered_tags)
end end
# @param [Array] all_tags all tags
# @return [Array] filtered tags according :since_tag option
def filter_since_tag(all_tags) def filter_since_tag(all_tags)
filtered_tags = all_tags filtered_tags = all_tags
tag = @options[:since_tag] tag = detect_since_tag
if tag if tag
if all_tags.map(&:name).include? tag if all_tags.map(&:name).include? tag
idx = all_tags.index { |t| t.name == tag } idx = all_tags.index { |t| t.name == tag }
@@ -79,6 +92,29 @@ module GitHubChangelogGenerator
filtered_tags filtered_tags
end end
# @param [Array] all_tags all tags
# @return [Array] filtered tags according :due_tag option
def filter_due_tag(all_tags)
filtered_tags = all_tags
tag = @options[:due_tag]
if tag
if (all_tags.count > 0) && (all_tags.map(&:name).include? tag)
idx = all_tags.index { |t| t.name == tag }
last_index = all_tags.count - 1
if idx > 0 && idx < last_index
filtered_tags = all_tags[idx + 1..last_index]
else
filtered_tags = []
end
else
Helper.log.warn "Warning: can't find tag #{tag}, specified with --due-tag option."
end
end
filtered_tags
end
# @param [Array] all_tags all tags
# @return [Array] filtered tags according :between_tags option
def filter_between_tags(all_tags) def filter_between_tags(all_tags)
filtered_tags = all_tags filtered_tags = all_tags
if @options[:between_tags] if @options[:between_tags]
@@ -92,6 +128,8 @@ module GitHubChangelogGenerator
filtered_tags filtered_tags
end end
# @param [Array] all_tags all tags
# @return [Array] filtered tags according :exclude_tags option
def filter_excluded_tags(all_tags) def filter_excluded_tags(all_tags)
filtered_tags = all_tags filtered_tags = all_tags
if @options[:exclude_tags] if @options[:exclude_tags]

View File

@@ -24,7 +24,9 @@ module GitHubChangelogGenerator
if options[:verbose] if options[:verbose]
Helper.log.info "Performing task with options:" Helper.log.info "Performing task with options:"
pp options options_to_display = options
options_to_display[:token] = options_to_display[:token].nil? ? nil : "hidden value"
pp options_to_display
puts "" puts ""
end end
@@ -50,6 +52,9 @@ module GitHubChangelogGenerator
opts.on("-o", "--output [NAME]", "Output file. Default is CHANGELOG.md") do |last| opts.on("-o", "--output [NAME]", "Output file. Default is CHANGELOG.md") do |last|
options[:output] = last options[:output] = last
end 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| opts.on("--bugs-label [LABEL]", "Setup custom label for bug-fixes section. Default is \"**Fixed bugs:**""") do |v|
options[:bug_prefix] = v options[:bug_prefix] = v
end end
@@ -116,6 +121,9 @@ module GitHubChangelogGenerator
opts.on("--since-tag x", "Change log will start after specified tag") do |v| opts.on("--since-tag x", "Change log will start after specified tag") do |v|
options[:since_tag] = v options[:since_tag] = v
end end
opts.on("--due-tag x", "Change log will end before specified tag") do |v|
options[:due_tag] = v
end
opts.on("--max-issues [NUMBER]", Integer, "Max number of issues to fetch from GitHub. Default is unlimited") do |max| opts.on("--max-issues [NUMBER]", Integer, "Max number of issues to fetch from GitHub. Default is unlimited") do |max|
options[:max_issues] = max options[:max_issues] = max
end end
@@ -156,6 +164,7 @@ module GitHubChangelogGenerator
tag2: nil, tag2: nil,
date_format: "%Y-%m-%d", date_format: "%Y-%m-%d",
output: "CHANGELOG.md", output: "CHANGELOG.md",
base: "HISTORY.md",
issues: true, issues: true,
add_issues_wo_labels: true, add_issues_wo_labels: true,
add_pr_wo_labels: true, add_pr_wo_labels: true,

View File

@@ -16,7 +16,7 @@ module GitHubChangelogGenerator
bug_labels enhancement_labels bug_labels enhancement_labels
between_tags exclude_tags since_tag max_issues between_tags exclude_tags since_tag max_issues
github_site github_endpoint simple_list github_site github_endpoint simple_list
future_release verbose ) future_release verbose release_url )
OPTIONS.each do |o| OPTIONS.each do |o|
attr_accessor o.to_sym attr_accessor o.to_sym

View File

@@ -1,3 +1,3 @@
module GitHubChangelogGenerator module GitHubChangelogGenerator
VERSION = "1.7.0" VERSION = "1.8.2"
end end

View File

@@ -90,6 +90,7 @@ describe GitHubChangelogGenerator::Generator do
end end
describe "#filter_since_tag" do describe "#filter_since_tag" do
context "with filled array" do
subject { generator.filter_since_tag(tags_mash_from_strings(%w(1 2 3))) } subject { generator.filter_since_tag(tags_mash_from_strings(%w(1 2 3))) }
context "with valid since tag" do context "with valid since tag" do
@@ -99,12 +100,63 @@ describe GitHubChangelogGenerator::Generator do
end end
context "with invalid since tag" do context "with invalid since tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: %w(invalid tags)) } let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: "Invalid tag") }
it { is_expected.to be_a Array } it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) } it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) }
end end
end end
context "with empty array" do
subject { generator.filter_since_tag(tags_mash_from_strings(%w())) }
context "with valid since tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: "2") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w())) }
end
context "with invalid since tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: "Invalid tag") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w())) }
end
end
end
describe "#filter_due_tag" do
context "with filled array" do
subject { generator.filter_due_tag(tags_mash_from_strings(%w(1 2 3))) }
context "with valid due tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(due_tag: "2") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w(3))) }
end
context "with invalid due tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(due_tag: "Invalid tag") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) }
end
end
context "with empty array" do
subject { generator.filter_due_tag(tags_mash_from_strings(%w())) }
context "with valid due tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(due_tag: "2") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w())) }
end
context "with invalid due tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(due_tag: "Invalid tag") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w())) }
end
end
end
describe "#get_time_of_tag" do describe "#get_time_of_tag" do
current_time = Time.now current_time = Time.now
before(:all) { @generator = GitHubChangelogGenerator::Generator.new } before(:all) { @generator = GitHubChangelogGenerator::Generator.new }