diff --git a/.changelogrc b/.changelogrc
index 3ace601..626d55b 100644
--- a/.changelogrc
+++ b/.changelogrc
@@ -3,6 +3,7 @@
"logo": "https://github.com/rafinskipg/git-changelog/raw/master/images/git-changelog-logo.png",
"intro": "Git changelog is a utility tool for generating changelogs. It is free and opensource. :)",
"debug": "true",
+ "template": "templates/template.md",
"sections": [
{
"title": "Bug Fixes",
diff --git a/.travis.yml b/.travis.yml
index ea39459..a46a4cf 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,8 @@
language: node_js
node_js:
- - "0.12"
- "4.4"
- "6.1"
+ - "7.3.0"
notifications:
email:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f63ec15..d8cd1ce 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,31 +1,42 @@
-__Git changelog__
+# Git changelog
_Git changelog is a utility tool for generating changelogs. It is free and opensource. :)_
-# (2016-07-29)
+## Bug Fixes
+ - fix error messages
+ ([ee5068bf](https://github.com/rafinskipg/git-changelog/commit/ee5068bffdbb9c0e45c8ce9ce0c2f790440f19e3))
+
+ - **git tag**
+ - get latest tag, regardless of branch for workflows that rely on git-flow releases
+ ([48800306](https://github.com/rafinskipg/git-changelog/commit/48800306fa5ac19b7e9a4c6d7f2f432ee8ae4d84))
+
+ - **options**
+ - Use version_name instead of version
+ ([43fdac85](https://github.com/rafinskipg/git-changelog/commit/43fdac855bfd2f67a43acc93ecc8ef2e7a81f45c))
----
-## Bug Fixes
-- **git log:** Ignores letter case
- ([d4cff0a8](https://github.com/rafinskipg/git-changelog/commit/d4cff0a86c5ce46405f3c0dd03f9c49a7d620792),
- [#54](https://github.com/rafinskipg/git-changelog/issues/54))
+
+## Features
+
+ - **template**
+ - Load default template if no custom template is found
+ ([41d5128b](https://github.com/rafinskipg/git-changelog/commit/41d5128b922efe3ced883a37bb4e170410160f4f))
+
+
## Documentation
+ - updating documentation with template info
+ ([70fb9774](https://github.com/rafinskipg/git-changelog/commit/70fb97742ea2182a9d25ca92d6eeab081b44cc63))
+
-- **readme:**
- - Unuseful commit
- ([4373f472](https://github.com/rafinskipg/git-changelog/commit/4373f4726eedad6d450c8255f5e57036a3e5e223))
- - fix link to the `.changelogrc` section
- ([2975171d](https://github.com/rafinskipg/git-changelog/commit/2975171d89e1823253399bbe87a184e9164e9799))
---
-*Generated with [git-changelog](https://github.com/rafinskipg/git-changelog). If you have any problems or suggestions, create an issue.* :) **Thanks**
\ No newline at end of file
+*Generated with [git-changelog](https://github.com/rafinskipg/git-changelog). If you have any problems or suggestions, create an issue.* :) **Thanks**
diff --git a/EXTENDEDCHANGELOG.md b/EXTENDEDCHANGELOG.md
index d5e73b4..1cb00a8 100644
--- a/EXTENDEDCHANGELOG.md
+++ b/EXTENDEDCHANGELOG.md
@@ -1,312 +1,386 @@
-__Git changelog extended__
+# Git changelog extended
_Git changelog is a utility tool for generating changelogs. It is free and opensource. :)_
-# (2016-07-29)
-
----
-
## Bug Fixes
-
-- Fix generation of logs
+ - fix error messages
+ ([ee5068bf](https://github.com/rafinskipg/git-changelog/commit/ee5068bffdbb9c0e45c8ce9ce0c2f790440f19e3))
+ - Fix generation of logs
([cddb2408](https://github.com/rafinskipg/git-changelog/commit/cddb2408fa3017be704acac51dabbba9f477a547))
-- correctly get branch name from the command line
+ - correctly get branch name from the command line
([4baa075b](https://github.com/rafinskipg/git-changelog/commit/4baa075bd93f878ee708817f911fe89c102dec02))
-- correctly detect when running under grunt on Windows
+ - correctly detect when running under grunt on Windows
([4205ea49](https://github.com/rafinskipg/git-changelog/commit/4205ea49a893e4d1807a39268739c13754d40cf2))
-- fixed tests
+ - fixed tests
([2e60172a](https://github.com/rafinskipg/git-changelog/commit/2e60172a4666c70d27e66d15dad297b89fff9583))
-- Stream didn't close properly
+ - Stream didn't close properly
([99f228cf](https://github.com/rafinskipg/git-changelog/commit/99f228cfa5cb26c46ef9e3b00171a5e3d38fd844))
-- Github commit url
+ - Github commit url
([c186f2d8](https://github.com/rafinskipg/git-changelog/commit/c186f2d877e7907305953610bcaaef331406178a))
-- **checkpath:** add missing require('path')
+
+ - **checkpath**
+ - add missing require('path')
([e5dab826](https://github.com/rafinskipg/git-changelog/commit/e5dab826062bd22dd37c8c3d3c24a4d9b4701f6d))
-- **generate:** create path to file if it does not already exist
+
+ - **generate**
+ - create path to file if it does not already exist
([62f6210f](https://github.com/rafinskipg/git-changelog/commit/62f6210f6895bcf5f9984b26948178b1a93cbc9e))
-- **git log:** Ignores letter case
+
+ - **git log**
+ - Ignores letter case
([d4cff0a8](https://github.com/rafinskipg/git-changelog/commit/d4cff0a86c5ce46405f3c0dd03f9c49a7d620792),
[#54](https://github.com/rafinskipg/git-changelog/issues/54))
-- **git_changelog_generate:** pass tag if it exists to gitReadLog
+
+ - **git tag**
+ - get latest tag, regardless of branch for workflows that rely on git-flow releases
+ ([48800306](https://github.com/rafinskipg/git-changelog/commit/48800306fa5ac19b7e9a4c6d7f2f432ee8ae4d84))
+
+ - **git_changelog_generate**
+ - pass tag if it exists to gitReadLog
([7c801927](https://github.com/rafinskipg/git-changelog/commit/7c801927672792fc9a818653b74c78d77c7bff9e),
[#5](https://github.com/rafinskipg/git-changelog/issues/5))
-- **nested lists:** nested list fix. Closes #9
+
+ - **nested lists**
+ - nested list fix. Closes #9
([22855518](https://github.com/rafinskipg/git-changelog/commit/2285551810919bd4d8a749ae3ddd88f9cedcdd0e),
[#9](https://github.com/rafinskipg/git-changelog/issues/9))
-- **options:** use repo_url instead of url
+
+ - **options**
+ - Use version_name instead of version
+ ([43fdac85](https://github.com/rafinskipg/git-changelog/commit/43fdac855bfd2f67a43acc93ecc8ef2e7a81f45c))
+ - use repo_url instead of url
([346b3949](https://github.com/rafinskipg/git-changelog/commit/346b39491923a49a3421f174a566b204d5fc7db9))
-- **package.json:** move q to dependancies since it is required to run
+
+ - **package.json**
+ - move q to dependancies since it is required to run
([257119cf](https://github.com/rafinskipg/git-changelog/commit/257119cf2bb6d8f341a5d65a2f47bcf803dff205))
-- **params:** Restores versionName in CLI
+
+ - **params**
+ - Restores versionName in CLI
([1d97f952](https://github.com/rafinskipg/git-changelog/commit/1d97f952bd5d37f67c1febdf161f4ce9b310eebf))
-## Features
-- Show pull requests merged
+
+## Features
+ - Show pull requests merged
([65f5504c](https://github.com/rafinskipg/git-changelog/commit/65f5504ce8e92fa39ced7da308e471cc85f750b5))
-- improve `git log` synthax command to use the branch name
+ - improve `git log` synthax command to use the branch name
([4ce61281](https://github.com/rafinskipg/git-changelog/commit/4ce6128103ece64b44695ac196b457e63649229b))
-- CLI option with git-changelog
+ - CLI option with git-changelog
([50af9f0a](https://github.com/rafinskipg/git-changelog/commit/50af9f0aeba14e88254aaf1bfd6433c4c6bc9fbe))
-- Working on new API
+ - Working on new API
([121b9928](https://github.com/rafinskipg/git-changelog/commit/121b99285d2a04f9159951fa0e3f849d0d618fef))
-- **bootstrap:** creating initial structure
+
+ - **bootstrap**
+ - creating initial structure
([dea45d68](https://github.com/rafinskipg/git-changelog/commit/dea45d68ce9555e876680bf7c0778add2f367a30))
-- **grunt-plugin:**
- - Commit for research purposes
+
+ - **grunt-plugin**
+ - Commit for research purposes
([5afbb7a9](https://github.com/rafinskipg/git-changelog/commit/5afbb7a95c9f0e985f78666e7e231967524a8928))
- - Now it is ready to be a grunt plugin
+ - Now it is ready to be a grunt plugin
([6422e055](https://github.com/rafinskipg/git-changelog/commit/6422e0552b30f6e94d11b03310a23c1342aa5965))
-- **options:** Added ignore tags option
+
+ - **options**
+ - Added ignore tags option
([95362e8b](https://github.com/rafinskipg/git-changelog/commit/95362e8b57a673e810ffe54ff3337de1ea5109a8))
-- **output:** added logo in printHeader
+
+ - **output**
+ - added logo in printHeader
([6b489450](https://github.com/rafinskipg/git-changelog/commit/6b489450a90172dc57059d7fd55fb4c6110152b2))
-- **package:** Added global install so you can run via command
+
+ - **package**
+ - Added global install so you can run via command
([86eae3f0](https://github.com/rafinskipg/git-changelog/commit/86eae3f013ace1c5c23afc32b2e8f878a69629f1))
+ - **template**
+ - Load default template if no custom template is found
+ ([41d5128b](https://github.com/rafinskipg/git-changelog/commit/41d5128b922efe3ced883a37bb4e170410160f4f))
+
+
-## Documentation
-- Updated readme with the correct specification
+## Documentation
+ - updating documentation with template info
+ ([70fb9774](https://github.com/rafinskipg/git-changelog/commit/70fb97742ea2182a9d25ca92d6eeab081b44cc63))
+ - Updated readme with the correct specification
([ec2de4bf](https://github.com/rafinskipg/git-changelog/commit/ec2de4bf599dfc77c24c9b86ee9c0d86fe37e5b8))
-- Updated options and tagging info
+ - Updated options and tagging info
([1ad3b6be](https://github.com/rafinskipg/git-changelog/commit/1ad3b6bedc6431b70e3a2e93e5967bad9a7830ee))
-- added documentation for explaining the commit message
+ - added documentation for explaining the commit message
([d516c2fb](https://github.com/rafinskipg/git-changelog/commit/d516c2fb464072fc1f4c86ec71a910eeab3e830c))
-- Added docs
+ - Added docs
([e0ba50c0](https://github.com/rafinskipg/git-changelog/commit/e0ba50c0bb0b13e9b39a59b8f4dda96e86d55644))
-- **readme:**
- - Unuseful commit
+
+ - **readme**
+ - Unuseful commit
([4373f472](https://github.com/rafinskipg/git-changelog/commit/4373f4726eedad6d450c8255f5e57036a3e5e223))
- - fix link to the `.changelogrc` section
+ - fix link to the `.changelogrc` section
([2975171d](https://github.com/rafinskipg/git-changelog/commit/2975171d89e1823253399bbe87a184e9164e9799))
- - Follow proper style in example commits
+ - Follow proper style in example commits
([6fef01ba](https://github.com/rafinskipg/git-changelog/commit/6fef01ba8a71bb5cd779ddb84f52b8f75296618d))
- - Reorder contents
+ - Reorder contents
([14e8a772](https://github.com/rafinskipg/git-changelog/commit/14e8a772c3a05c32bc9fba6f75565132025d4942))
- - TOC
+ - TOC
([d6338ab4](https://github.com/rafinskipg/git-changelog/commit/d6338ab45f6e45e5562e5e6f4f1db86f39ca458d))
- - Added more information on the new specification
+ - Added more information on the new specification
([f984eedd](https://github.com/rafinskipg/git-changelog/commit/f984eedde6be5db804d0b6bf2e238ab2e7ca15fb))
- - added more commit examples and npm versioning usage
+ - added more commit examples and npm versioning usage
([51341b7a](https://github.com/rafinskipg/git-changelog/commit/51341b7aae082c6c1a1caaa77dfdbfdc2622a56f))
- - add logo
+ - add logo
([1af36c9b](https://github.com/rafinskipg/git-changelog/commit/1af36c9b0dad5cc0c2a321e3f280a89d76a8fb2b))
- - Final readme Fixes #1 Closes #1
+ - Final readme Fixes #1 Closes #1
([e725d8f4](https://github.com/rafinskipg/git-changelog/commit/e725d8f4bf477b517ca6185a75fdfa0aa660b3be),
[#1](https://github.com/rafinskipg/git-changelog/issues/1))
-## Refactor
-- Refactor branch name
+
+## Refactor
+ - Refactor branch name
([8774b963](https://github.com/rafinskipg/git-changelog/commit/8774b963fd5e15de1cc1066c91034f9b1d34c4bc))
-- added debug messages and refactored some additional code
+ - added debug messages and refactored some additional code
([70e48caf](https://github.com/rafinskipg/git-changelog/commit/70e48caf330b7f76fdea474ce58bcf96cb11ccbc))
-- modified the task using a factory pattern to improve testability
+ - modified the task using a factory pattern to improve testability
([1a0f25d3](https://github.com/rafinskipg/git-changelog/commit/1a0f25d3d9bbedd029c810c4dd2d35419cbb9276))
-- Removed ignore tags and updated documentation
+ - Removed ignore tags and updated documentation
([cb17b55d](https://github.com/rafinskipg/git-changelog/commit/cb17b55de2ba0b597147fe4ce15e6883feb82a88))
-- removed deprecated options
+ - removed deprecated options
([7d05b632](https://github.com/rafinskipg/git-changelog/commit/7d05b632af6be3db2c00925b7cf28cd990c19a71))
-- **delete:** deleted some files
+
+ - **delete**
+ - deleted some files
([b9c72f57](https://github.com/rafinskipg/git-changelog/commit/b9c72f57c4920420fef8c486bfccf5798870e06b))
-- **docs:**
- - Angular document commits
+
+ - **docs**
+ - Angular document commits
([01e8c1ba](https://github.com/rafinskipg/git-changelog/commit/01e8c1ba4c29fcddcfc237f4e6185682b9ced67d))
- - Added docs
+ - Added docs
([0a155845](https://github.com/rafinskipg/git-changelog/commit/0a1558458c46574c5b0e6ec3749668fad1c8647a))
-- **generate:** replace `#getStream` with `fse#createOutputStream`
+
+ - **generate**
+ - replace `#getStream` with `fse#createOutputStream`
([2d252d89](https://github.com/rafinskipg/git-changelog/commit/2d252d89017a70008896497e36f03e9d2add2c97))
-- **lib:** simplify methods and refactor into separate files
+
+ - **lib**
+ - simplify methods and refactor into separate files
([7a3600bf](https://github.com/rafinskipg/git-changelog/commit/7a3600bf9a5487cb26e3eb4b65ac774a68b6b91e))
-- **writechangelog:** method now returns a promise
+
+ - **writechangelog**
+ - method now returns a promise
([69fa1b0b](https://github.com/rafinskipg/git-changelog/commit/69fa1b0b11a603683342a9e0626cb69550b92002))
+
+
## Style
-- **message:** Added a message on the changelog for referencing the github
+ - **message**
+ - Added a message on the changelog for referencing the github
([d20031a9](https://github.com/rafinskipg/git-changelog/commit/d20031a9dc6fd92cba205903b2fd9d25feae6ea7))
-## Test
-- Tests fixed
+
+## Test
+ - Tests fixed
([b9edae3b](https://github.com/rafinskipg/git-changelog/commit/b9edae3bfc64f2a8c2320f6f27326225bd586cc7))
-- added test for .init(), .getPreviousTag(), getRepoUrl(), .log() and .warn()
+ - added test for .init(), .getPreviousTag(), getRepoUrl(), .log() and .warn()
([fd099a85](https://github.com/rafinskipg/git-changelog/commit/fd099a858b44e67e28f4e18f07c520803f3ac55e))
-- removed unnecessary debug setting (was using for "debugging")
+ - removed unnecessary debug setting (was using for "debugging")
([83cd52b1](https://github.com/rafinskipg/git-changelog/commit/83cd52b1e8b79dd6bff13dc0d2003e802f8e45e6))
-- updated test to cover promise return from .generate()
+ - updated test to cover promise return from .generate()
([c182ee47](https://github.com/rafinskipg/git-changelog/commit/c182ee47a4ec36a453420f8cc04358ec6e98e381))
-- ensure changelog has default setting at the beginning of spec
+ - ensure changelog has default setting at the beginning of spec
([31f81e26](https://github.com/rafinskipg/git-changelog/commit/31f81e262440aa10efafd90c74d98569df418795))
-- changed spy on changelog.generate() to stub, to avoid polluting following tests
+ - changed spy on changelog.generate() to stub, to avoid polluting following tests
([0aa35588](https://github.com/rafinskipg/git-changelog/commit/0aa35588cf944b2f84b842d66220d50e8f5d96a8))
-- added test for .writeChageLog() and .organizeCommits()
+ - added test for .writeChageLog() and .organizeCommits()
([b07f28e1](https://github.com/rafinskipg/git-changelog/commit/b07f28e1e92bdf20be669596651b344d2f70855e))
-- added default mocha options
+ - added default mocha options
([595c8347](https://github.com/rafinskipg/git-changelog/commit/595c8347fd4e2b697ceac247babe7ece7c90c4fa))
-- added missing done() callback on .catch()
+ - added missing done() callback on .catch()
([0da53e9c](https://github.com/rafinskipg/git-changelog/commit/0da53e9c8ad8a967753ac06dc1c23302c7956017))
-- added tests for tag option equals to false
+ - added tests for tag option equals to false
([1fc1e809](https://github.com/rafinskipg/git-changelog/commit/1fc1e809dcca7d499f870c314d2860121fcb6bab))
-- Added unit tests for commit parsing
+ - Added unit tests for commit parsing
([504a61a7](https://github.com/rafinskipg/git-changelog/commit/504a61a715ed541feee4570810c2153ba8984420))
-- **writechangelog:** updated test to reflect changes to method
+
+ - **writechangelog**
+ - updated test to reflect changes to method
([b999948f](https://github.com/rafinskipg/git-changelog/commit/b999948f2c38f5d002fa0dc535429a80acdf2d75))
-## Chore
-- updated grunt contrib clean
+
+## Chore
+ - updated grunt contrib clean
([e28c0c76](https://github.com/rafinskipg/git-changelog/commit/e28c0c763b7953861c05bcbedf04c3d6d48f8243))
-- Remove grunt from peer dependencies
+ - Remove grunt from peer dependencies
([f6111d31](https://github.com/rafinskipg/git-changelog/commit/f6111d31f0c70f8368d2a57ea708bf58990f6bfd))
-- Updated jshint
+ - Updated jshint
([1d5f6b1d](https://github.com/rafinskipg/git-changelog/commit/1d5f6b1d471e9d48ac2b4c7c8b78e3e5a8021ff4))
-- typos and grammar
+ - typos and grammar
([5ae2ee52](https://github.com/rafinskipg/git-changelog/commit/5ae2ee52d1f096d375d077299047684eae2cd5e2))
-- a couple of spelling corrections [ci skip]
+ - a couple of spelling corrections [ci skip]
([1486a845](https://github.com/rafinskipg/git-changelog/commit/1486a84537c5fd2d7997721820981c7949487af2))
-- minor edits to README
+ - minor edits to README
([481c6c80](https://github.com/rafinskipg/git-changelog/commit/481c6c80d49e5e11c72d8378976d5d3ee1d581d2))
-- fixing lint errors
+ - fixing lint errors
([3a8e8d48](https://github.com/rafinskipg/git-changelog/commit/3a8e8d486a2b89b9f04d01200fe4f9f7851d0123))
-- added chai-as-promise to handle methods that return promises
+ - added chai-as-promise to handle methods that return promises
([1d384257](https://github.com/rafinskipg/git-changelog/commit/1d3842576839b763b28a777e96b061dbd4d01a80))
-- updated travis config
+ - updated travis config
([d6a7ef94](https://github.com/rafinskipg/git-changelog/commit/d6a7ef945f600ec787b515486bd3abfa2f86a25b))
-- stopped tracking test output files
+ - stopped tracking test output files
([1d12bccb](https://github.com/rafinskipg/git-changelog/commit/1d12bccb9f7dce07ff45318304dc5ab82620b6f1))
-- added istanbul configuration file
+ - added istanbul configuration file
([88c945e6](https://github.com/rafinskipg/git-changelog/commit/88c945e6d8ddddfe6ee3bdf808ae2c749b4eabf3))
-- updated travis configuration for code climate
+ - updated travis configuration for code climate
([fbd651dd](https://github.com/rafinskipg/git-changelog/commit/fbd651dd765a1ee26293dd03543e578181462e3f))
-- fixed lint issues in tests
+ - fixed lint issues in tests
([2edb0199](https://github.com/rafinskipg/git-changelog/commit/2edb019910a421cd94868397a0f5881e90af4ed5))
-- add tests to lint task
+ - add tests to lint task
([1d789792](https://github.com/rafinskipg/git-changelog/commit/1d789792143d2f68820c16426e772857e45ba181))
-- add lint rules for mocha test
+ - add lint rules for mocha test
([bbea9341](https://github.com/rafinskipg/git-changelog/commit/bbea9341acb37f729e7f83d59d784cb4ff7969e1))
-- ignore files generated by tests
+ - ignore files generated by tests
([3ccbff47](https://github.com/rafinskipg/git-changelog/commit/3ccbff47ee2dd655da95ea3a9b95cb156f8f6956))
-- update dependencies
+ - update dependencies
([3036d803](https://github.com/rafinskipg/git-changelog/commit/3036d8037f4af6aa34fb137037a9eb9d0ce34297))
-- removed unused dependency
+ - removed unused dependency
([cdd9f0d5](https://github.com/rafinskipg/git-changelog/commit/cdd9f0d5623f839eaaf646d4de0cf72816cf00af))
-- fixed typo
+ - fixed typo
([081a8f96](https://github.com/rafinskipg/git-changelog/commit/081a8f963104711b5f15bb8468489ee13927e226))
-- added commits fixture for tests
+ - added commits fixture for tests
([b7d16b68](https://github.com/rafinskipg/git-changelog/commit/b7d16b682a8167cd4a90e59c4f511774f6572ce1))
-- added missing development dependencies
+ - added missing development dependencies
([e52e3ec6](https://github.com/rafinskipg/git-changelog/commit/e52e3ec6234db4cc9055c6e0abd5f32b587f67d6))
-- adding missing newline at the end of file
+ - adding missing newline at the end of file
([da4b5492](https://github.com/rafinskipg/git-changelog/commit/da4b54920e1be490fb47a25906eece63229b0094))
-- removed testing from grunt file (causing recursion issues during some tests)
+ - removed testing from grunt file (causing recursion issues during some tests)
([8e94e8ac](https://github.com/rafinskipg/git-changelog/commit/8e94e8ac23e73709495cf0c6851fbaf1a84c0c9b))
-- install mocha before travis scripts
+ - install mocha before travis scripts
([9be62aae](https://github.com/rafinskipg/git-changelog/commit/9be62aaeb7d50959cff870e0cabb08277d1c512b))
-- updated npm scripts and added debug
+ - updated npm scripts and added debug
([aa4f2a2d](https://github.com/rafinskipg/git-changelog/commit/aa4f2a2d7b834484f65239ceccdf4f973dbe0cee))
-- moved fixtures to the test folder
+ - moved fixtures to the test folder
([e59d429b](https://github.com/rafinskipg/git-changelog/commit/e59d429b032451f75ef986e2d1b3c63fb8672a1c))
-- removed unused test/hacky.js
+ - removed unused test/hacky.js
([500fdf3c](https://github.com/rafinskipg/git-changelog/commit/500fdf3c37e72c98f4809806e85926035eb46792))
-- rename changelog.spec.js to match file being tested
+ - rename changelog.spec.js to match file being tested
([41757850](https://github.com/rafinskipg/git-changelog/commit/417578507b39aeffe826922ad3eccfcc13ad6ed0))
-- fixed lint errors
+ - fixed lint errors
([71a5eae2](https://github.com/rafinskipg/git-changelog/commit/71a5eae2212e7abf87c97a569f8251a56b5474a6))
-- added grunt coverage task
+ - added grunt coverage task
([ef6cf2cf](https://github.com/rafinskipg/git-changelog/commit/ef6cf2cf14b69fe4200eb0eeb9319fb4bcdffcc2))
-- added node.js `0.12` to travis-ci config
+ - added node.js `0.12` to travis-ci config
([24d9c58a](https://github.com/rafinskipg/git-changelog/commit/24d9c58a0a4ea349709719c431ca9878a2f01bc4))
-- Updated readme
+ - Updated readme
([fca6ecba](https://github.com/rafinskipg/git-changelog/commit/fca6ecbac686661ece15acdb41d23e86011457f2))
-- package json version 1.1.3
+ - package json version 1.1.3
([9d600386](https://github.com/rafinskipg/git-changelog/commit/9d6003868e352ae21383913f671bc091afc9d8c7))
-- **cleanup:**
- - remove unnecessary code [skip ci]
+
+ - **cleanup**
+ - remove unnecessary code [skip ci]
([80dbe3ec](https://github.com/rafinskipg/git-changelog/commit/80dbe3ec7a28e7c20d99e89009856c70138350b0))
- - remove `#getStream` and `#checkPath`
+ - remove `#getStream` and `#checkPath`
([cd75ebc4](https://github.com/rafinskipg/git-changelog/commit/cd75ebc44e39242b7e9c8ef2363c86d3f1cabc0e))
-- **deps:** install fs-extra@0.18.4
+
+ - **deps**
+ - install fs-extra@0.18.4
([7c8e257b](https://github.com/rafinskipg/git-changelog/commit/7c8e257b81f0daeba7e347d175583af1a7a9bfa0))
-- **images:**
- - add logo in JPEG format
+
+ - **images**
+ - add logo in JPEG format
([50338b9a](https://github.com/rafinskipg/git-changelog/commit/50338b9a8b5540e42273857448e803d8b85c689d))
- - add logo in PNG format
+ - add logo in PNG format
([bb5fbbdb](https://github.com/rafinskipg/git-changelog/commit/bb5fbbdba7ef2b9466c185c12ef426d82fe25bcf))
-- **lint:**
- - add missing semicolon
+
+ - **lint**
+ - add missing semicolon
([2888af48](https://github.com/rafinskipg/git-changelog/commit/2888af4803f85da1afbb8c9832314f53cc4ca131))
- - fix indentation
+ - fix indentation
([4cf9b6e6](https://github.com/rafinskipg/git-changelog/commit/4cf9b6e69a1426d48f18da45614f8f01994707b7))
- - have jshint ignore false positives
+ - have jshint ignore false positives
([ed8e9df4](https://github.com/rafinskipg/git-changelog/commit/ed8e9df48720c42086186fa4219262a351bbc3e4))
- - fixing jshint errors
+ - fixing jshint errors
([987366f0](https://github.com/rafinskipg/git-changelog/commit/987366f02517c9cfdb62264d0f6ea7d0b20d6634))
-- **package:** Package json version
+
+ - **package**
+ - Package json version
([990b8ea0](https://github.com/rafinskipg/git-changelog/commit/990b8ea04ca04f3c907653b0fa89ae6ddd601092))
-- **package.json:** Added preversion script
+
+ - **package.json**
+ - Added preversion script
([b3f1e44a](https://github.com/rafinskipg/git-changelog/commit/b3f1e44a900b00bda1facaee5354ba1ff58166aa))
-- **release:**
- - 1.0.0 codename(magnificent-goldman)
+
+ - **release**
+ - 1.0.0 codename(magnificent-goldman)
([6b836fbe](https://github.com/rafinskipg/git-changelog/commit/6b836fbea9405727bfc6d8e83349ea5cf8965b05))
- - 0.1.8 codename(furious-stallman)
+ - 0.1.8 codename(furious-stallman)
([b9432318](https://github.com/rafinskipg/git-changelog/commit/b943231854ffd6cb0c5f32e5482cadd99c96f3e9))
-- **task:** cleanup unused requires
+
+ - **task**
+ - cleanup unused requires
([8a41d4e7](https://github.com/rafinskipg/git-changelog/commit/8a41d4e7b245b2698749279765bcef4748e18ac7))
-## Branchs merged
-- Merge branch 'feature/add-logo'
+
+## Branchs merged
+ - Merge branch 'feature/add-logo'
([e29b2dd8](https://github.com/rafinskipg/git-changelog/commit/e29b2dd8e088386eeec3f0c125973de6c8cdc2c6))
-- Merge branch 'development' into feature/code-refactoring
+ - Merge branch 'development' into feature/code-refactoring
([34ea0198](https://github.com/rafinskipg/git-changelog/commit/34ea0198b976c72c638fd815be5a5913c67ef80a))
-## Pull requests merged
-- Merge pull request #55 from kerimdzhanov/patch-1
+
+## Pull requests merged
+ - Merge pull request #60 from seivan/feature/latest_tag_regardless_of_branch
+ ([1ff50d0d](https://github.com/rafinskipg/git-changelog/commit/1ff50d0dc03f8c0db9961c034945c3ef8f4268f7))
+ - Merge pull request #58 from olamothe/master
+ ([3fed7270](https://github.com/rafinskipg/git-changelog/commit/3fed727077168815f24aad7bbf5768913e3843ab))
+ - Merge pull request #55 from kerimdzhanov/patch-1
([31d13896](https://github.com/rafinskipg/git-changelog/commit/31d1389637b59ac3a6c68c3f8fca99045675c36c))
-- Merge pull request #50 from rafinskipg/changelogrc
+ - Merge pull request #50 from rafinskipg/changelogrc
([fd07a4bf](https://github.com/rafinskipg/git-changelog/commit/fd07a4bf039c7c8ddbb496c644dfd5fcc1627904))
-- Merge pull request #41 from pmiossec/fix_branch_option
+ - Merge pull request #41 from pmiossec/fix_branch_option
([6247118a](https://github.com/rafinskipg/git-changelog/commit/6247118a573259cbe71c6fdd28cb53dcb7f1b855))
-- Merge pull request #45 from xcambar/versionName
+ - Merge pull request #45 from xcambar/versionName
([2e50373a](https://github.com/rafinskipg/git-changelog/commit/2e50373a6f42e53598612f0e474c008624d6e80c))
-- Merge pull request #47 from Sjors/patch-1
+ - Merge pull request #47 from Sjors/patch-1
([d786fd08](https://github.com/rafinskipg/git-changelog/commit/d786fd084d7c1c250c866bec3c5d0c73b9abe271))
-- Merge pull request #46 from zoner14/master
+ - Merge pull request #46 from zoner14/master
([0485a1fd](https://github.com/rafinskipg/git-changelog/commit/0485a1fd4bf01662f50b93098c6b535eb7c527eb))
-- Merge pull request #37 from richardthombs/fix-grunt-on-windows
+ - Merge pull request #37 from richardthombs/fix-grunt-on-windows
([5f024339](https://github.com/rafinskipg/git-changelog/commit/5f02433963b5b603c5763bd5c1a37cf8ca9e3598))
-- Merge pull request #33 from richardthombs/fix-typos
+ - Merge pull request #33 from richardthombs/fix-typos
([2656d150](https://github.com/rafinskipg/git-changelog/commit/2656d150eb95c6ad9326e4265ba64edf8e49a11c))
-- Merge pull request #30 from JohnnyEstilles/refactor/get-stream
+ - Merge pull request #30 from JohnnyEstilles/refactor/get-stream
([a52b1169](https://github.com/rafinskipg/git-changelog/commit/a52b1169a2510d83d6d4fd5113ce157f30c4d4d0))
-- Merge pull request #25 from JohnnyEstilles/code-climate
+ - Merge pull request #25 from JohnnyEstilles/code-climate
([28053b92](https://github.com/rafinskipg/git-changelog/commit/28053b9292d3d61fb33a004f6088c244e653b76b))
-- Merge pull request #23 from JohnnyEstilles/docs/readme-updates
+ - Merge pull request #23 from JohnnyEstilles/docs/readme-updates
([3079151a](https://github.com/rafinskipg/git-changelog/commit/3079151a8d5f90d0830aab4437a65dff4d837b2a))
-- Merge pull request #20 from JohnnyEstilles/feature/code-refactoring
+ - Merge pull request #20 from JohnnyEstilles/feature/code-refactoring
([be209f04](https://github.com/rafinskipg/git-changelog/commit/be209f04c22f1ce2cb82e6412c4ddf117897a9e7))
-- Merge pull request #12 from jodybrewster/master
+ - Merge pull request #12 from jodybrewster/master
([219ea809](https://github.com/rafinskipg/git-changelog/commit/219ea8091ac81a55b0210c9a7fd41a7f0ee5660f))
-- Merge pull request #7 from colegleason/fix-tags
+ - Merge pull request #7 from colegleason/fix-tags
([1d4f6043](https://github.com/rafinskipg/git-changelog/commit/1d4f604363094d4eee3b4d7b1ca01133edaad344))
-- Merge pull request #6 from colegleason/add-q
+ - Merge pull request #6 from colegleason/add-q
([2a712b9c](https://github.com/rafinskipg/git-changelog/commit/2a712b9cfd912f36b6f7f70d16b336575881881a))
+
+
---
-*Generated with [git-changelog](https://github.com/rafinskipg/git-changelog). If you have any problems or suggestions, create an issue.* :) **Thanks**
\ No newline at end of file
+*Generated with [git-changelog](https://github.com/rafinskipg/git-changelog). If you have any problems or suggestions, create an issue.* :) **Thanks**
diff --git a/Gruntfile.js b/Gruntfile.js
index 048767b..7805420 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -43,6 +43,7 @@ module.exports = function(grunt) {
tag1: {
options: {
app_name : 'Since tag 1 changelog',
+ intro: 'This changelog is from the previous tag',
file: 'output/tag1.md',
logo : 'https://github.com/rafinskipg/git-changelog/raw/master/images/git-changelog-logo.png',
version : 'squeezy potatoe',
@@ -60,6 +61,18 @@ module.exports = function(grunt) {
]
}
},
+ customTemplate: {
+ options: {
+ app_name : 'Custom Template',
+ intro: 'This changelog is generated with a custom template',
+ file: 'output/customTemplate.md',
+ template: 'templates/template_two.md',
+ logo : 'https://github.com/rafinskipg/git-changelog/raw/master/images/git-changelog-logo.png',
+ version : 'squeezy potatoe',
+ tag: 'v0.0.1',
+ debug: true
+ }
+ },
extended: {
options: {
app_name : 'Git changelog extended',
diff --git a/README.md b/README.md
index 47a0809..db49f94 100644
--- a/README.md
+++ b/README.md
@@ -43,11 +43,16 @@
Since version `1.0.0` git-changelog has included the [`.changelogrc` specification](#changelogrc-specification) and has discontinued the next options:
- `grep_commits` option has been removed in favour of the `.changelogrc` options
-- `tag = false`, in addition to pick logs from the begining of the project, now groups the commits by tag [see example]. **TODO**
-- `tag = false` && `group=false` will log from the begining of the project, without grouping by tag **TODO**
- `repo_url` fixed as parameter
- `branch_name` changed to `branch`
+### v1.1.0
+- `version_name` instead of `version`
+
+
+**ATTENTION: Help wanted, there are some easy issues that you can contribute to. WINK WINK**
+
+
## `.changelogrc` specification
The `.changelogrc` file contains the "standard commit guideliness" that you and your team are following.
@@ -61,8 +66,9 @@ This specification is used to grep the commits on your log, it contains a valid
"intro": "Git changelog is a utility tool for generating changelogs. It is free and opensource. :)",
"branch" : "",
"repo_url": "",
- "version" : "v1.0.0",
+ "version_name" : "v1.0.0",
"file": "CHANGELOG.md",
+ "template": "myCustomTemplate.md",
"sections": [
{
"title": "Bug Fixes",
@@ -112,12 +118,13 @@ This specification is used to grep the commits on your log, it contains a valid
* **branch** : The name of the branch. Defaults to ` `
* **repo_url** : The url of the project. For issues and commits links. Defaults to `git config --get remote.origin.url`
-* **version**: The version of the project. Defaults to ` `, *DEPRECATED* will default to the tag name
+* **version_name**: The version name of the project.
* **file**: The name of the file that will be generated. Defaults to `CHANGELOG.md`,
+* **template**: The template for generating the changelog. It defaults to the one inside this project (/templates/template.md)
* **app_name** : The name of the project. Defaults to `My App - Changelog`
* **intro** : The introduction text on the header of the changelog. Defaults to `null`
* **logo** : A logo URL to be included in the header of the changelog. Defaults to `null`
-* **changelogrc ** : Relative path indicating the location of the .changelogrc file, defaults to current dir.
+* **changelogrc** : Relative path indicating the location of the .changelogrc file, defaults to current dir.
* **tag**: You can select from which tag to generate the log, it defaults to the last one. Set it to false for log since the beginning of the project
* **debug**: Debug mode, false by default
* **sections**: Group the commit by sections. The sections included by default are the ones that are on the previous example of .changelogrc file.
@@ -161,7 +168,7 @@ grunt.initConfig({
options: {
app_name : 'Git changelog extended',
file : 'EXTENDEDCHANGELOG.md',
- version : 'squeezy potatoe',
+ version_name : 'squeezy potatoe',
sections : [
{
"title": "Test commits",
@@ -183,6 +190,18 @@ grunt.initConfig({
file : 'tags/certainTag.md',
tag : 'v0.0.1'
}
+ },
+ customTemplate: {
+ options: {
+ app_name : 'Custom Template',
+ intro: 'This changelog is generated with a custom template',
+ file: 'output/customTemplate.md',
+ template: 'templates/template_two.md',
+ logo : 'https://github.com/rafinskipg/git-changelog/raw/master/images/git-changelog-logo.png',
+ version_name : 'squeezy potatoe',
+ tag: 'v0.0.1',
+ debug: true
+ }
}
}
})
@@ -206,19 +225,21 @@ Use it directly with the common options
Options:
- -h, --help output usage information
- -V, --version output the version number
- -e, --extended Extended log
- -a, --app_name [app_name] Name [app_name]
- -b, --branch [branch] Branch name [branch]
- -f, --file [file] File [file]
- -r, --repo_url [url] Repo url [url]
- -l, --logo [logo] Logo path [logo]
- -i, --intro [intro] intro text [intro]
- -t, --tag [tag] Since tag [tag]
- -rc, --changelogrc [changelogrc] .changelogrc relative path [changelogrc]
- -g, --grep [grep] Grep commits for [grep]
- -d, --debug Debugger
+ -h, --help output usage information
+ -V, --version output the version number of the package
+ -e, --extended Extended log
+ -n, --version_name [version_name] Name of the version
+ -a, --app_name [app_name] Name [app_name]
+ -b, --branch [branch] Branch name [branch]
+ -f, --file [file] File [file]
+ -tpl, --template [template] Template [template]
+ -r, --repo_url [repo_url] Repo url [repo_url]
+ -l, --logo [logo] Logo path [logo]
+ -i, --intro [intro] intro text [intro]
+ -t, --tag [tag] Since tag [tag]
+ -rc, --changelogrc [changelogrc] .changelogrc relative path [changelogrc]
+ -g, --grep [grep] Grep commits for [grep]
+ -d, --debug Debugger
```
diff --git a/output/customTemplate.md b/output/customTemplate.md
new file mode 100644
index 0000000..38ba4ee
--- /dev/null
+++ b/output/customTemplate.md
@@ -0,0 +1,167 @@
+
+
+# Custom Template
+
+_This changelog is generated with a custom template_
+
+## v0.0.1 ( Sun Dec 25 2016 13:33:22 GMT+0100 (CET) )
+
+
+## Bug Fixes
+ - fix error messages (ee5068bffdbb9c0e45c8ce9ce0c2f790440f19e3
+ - Fix generation of logs (cddb2408fa3017be704acac51dabbba9f477a547
+ - correctly get branch name from the command line (4baa075bd93f878ee708817f911fe89c102dec02
+ - correctly detect when running under grunt on Windows (4205ea49a893e4d1807a39268739c13754d40cf2
+ - fixed tests (2e60172a4666c70d27e66d15dad297b89fff9583
+ - Stream didn't close properly (99f228cfa5cb26c46ef9e3b00171a5e3d38fd844
+ - Github commit url (c186f2d877e7907305953610bcaaef331406178a
+ - **checkpath**
+ - add missing require('path') (e5dab826062bd22dd37c8c3d3c24a4d9b4701f6d)
+ - **generate**
+ - create path to file if it does not already exist (62f6210f6895bcf5f9984b26948178b1a93cbc9e)
+ - **git log**
+ - Ignores letter case (d4cff0a86c5ce46405f3c0dd03f9c49a7d620792, Closes: [#54](https://github.com/rafinskipg/git-changelog/issues/54))
+ - **git tag**
+ - get latest tag, regardless of branch for workflows that rely on git-flow releases (48800306fa5ac19b7e9a4c6d7f2f432ee8ae4d84)
+ - **git_changelog_generate**
+ - pass tag if it exists to gitReadLog (7c801927672792fc9a818653b74c78d77c7bff9e, Closes: [#5](https://github.com/rafinskipg/git-changelog/issues/5))
+ - **nested lists**
+ - nested list fix. Closes #9 (2285551810919bd4d8a749ae3ddd88f9cedcdd0e, Closes: [#9](https://github.com/rafinskipg/git-changelog/issues/9))
+ - **options**
+ - Use version_name instead of version (43fdac855bfd2f67a43acc93ecc8ef2e7a81f45c) - use repo_url instead of url (346b39491923a49a3421f174a566b204d5fc7db9)
+ - **package.json**
+ - move q to dependancies since it is required to run (257119cf2bb6d8f341a5d65a2f47bcf803dff205)
+ - **params**
+ - Restores versionName in CLI (1d97f952bd5d37f67c1febdf161f4ce9b310eebf)
+
+
+
+## Features
+ - Show pull requests merged (65f5504ce8e92fa39ced7da308e471cc85f750b5
+ - improve `git log` synthax command to use the branch name (4ce6128103ece64b44695ac196b457e63649229b
+ - CLI option with git-changelog (50af9f0aeba14e88254aaf1bfd6433c4c6bc9fbe
+ - Working on new API (121b99285d2a04f9159951fa0e3f849d0d618fef
+ - **bootstrap**
+ - creating initial structure (dea45d68ce9555e876680bf7c0778add2f367a30)
+ - **grunt-plugin**
+ - Commit for research purposes (5afbb7a95c9f0e985f78666e7e231967524a8928) - Now it is ready to be a grunt plugin (6422e0552b30f6e94d11b03310a23c1342aa5965)
+ - **options**
+ - Added ignore tags option (95362e8b57a673e810ffe54ff3337de1ea5109a8)
+ - **output**
+ - added logo in printHeader (6b489450a90172dc57059d7fd55fb4c6110152b2)
+ - **package**
+ - Added global install so you can run via command (86eae3f013ace1c5c23afc32b2e8f878a69629f1)
+ - **template**
+ - Load default template if no custom template is found (41d5128b922efe3ced883a37bb4e170410160f4f)
+
+
+
+## Documentation
+ - updating documentation with template info (70fb97742ea2182a9d25ca92d6eeab081b44cc63
+ - Updated readme with the correct specification (ec2de4bf599dfc77c24c9b86ee9c0d86fe37e5b8
+ - Updated options and tagging info (1ad3b6bedc6431b70e3a2e93e5967bad9a7830ee
+ - added documentation for explaining the commit message (d516c2fb464072fc1f4c86ec71a910eeab3e830c
+ - Added docs (e0ba50c0bb0b13e9b39a59b8f4dda96e86d55644
+ - **readme**
+ - Unuseful commit (4373f4726eedad6d450c8255f5e57036a3e5e223) - fix link to the `.changelogrc` section (2975171d89e1823253399bbe87a184e9164e9799) - Follow proper style in example commits (6fef01ba8a71bb5cd779ddb84f52b8f75296618d) - Reorder contents (14e8a772c3a05c32bc9fba6f75565132025d4942) - TOC (d6338ab45f6e45e5562e5e6f4f1db86f39ca458d) - Added more information on the new specification (f984eedde6be5db804d0b6bf2e238ab2e7ca15fb) - added more commit examples and npm versioning usage (51341b7aae082c6c1a1caaa77dfdbfdc2622a56f) - add logo (1af36c9b0dad5cc0c2a321e3f280a89d76a8fb2b) - Final readme Fixes #1 Closes #1 (e725d8f4bf477b517ca6185a75fdfa0aa660b3be, Closes: [#1](https://github.com/rafinskipg/git-changelog/issues/1))
+
+
+
+## Refactor
+ - Refactor branch name (8774b963fd5e15de1cc1066c91034f9b1d34c4bc
+ - added debug messages and refactored some additional code (70e48caf330b7f76fdea474ce58bcf96cb11ccbc
+ - modified the task using a factory pattern to improve testability (1a0f25d3d9bbedd029c810c4dd2d35419cbb9276
+ - Removed ignore tags and updated documentation (cb17b55de2ba0b597147fe4ce15e6883feb82a88
+ - removed deprecated options (7d05b632af6be3db2c00925b7cf28cd990c19a71
+ - **delete**
+ - deleted some files (b9c72f57c4920420fef8c486bfccf5798870e06b)
+ - **docs**
+ - Angular document commits (01e8c1ba4c29fcddcfc237f4e6185682b9ced67d) - Added docs (0a1558458c46574c5b0e6ec3749668fad1c8647a)
+ - **generate**
+ - replace `#getStream` with `fse#createOutputStream` (2d252d89017a70008896497e36f03e9d2add2c97)
+ - **lib**
+ - simplify methods and refactor into separate files (7a3600bf9a5487cb26e3eb4b65ac774a68b6b91e)
+ - **writechangelog**
+ - method now returns a promise (69fa1b0b11a603683342a9e0626cb69550b92002)
+
+
+
+## Style
+ - **message**
+ - Added a message on the changelog for referencing the github (d20031a9dc6fd92cba205903b2fd9d25feae6ea7)
+
+
+
+## Test
+ - Tests fixed (b9edae3bfc64f2a8c2320f6f27326225bd586cc7
+ - added test for .init(), .getPreviousTag(), getRepoUrl(), .log() and .warn() (fd099a858b44e67e28f4e18f07c520803f3ac55e
+ - removed unnecessary debug setting (was using for "debugging") (83cd52b1e8b79dd6bff13dc0d2003e802f8e45e6
+ - updated test to cover promise return from .generate() (c182ee47a4ec36a453420f8cc04358ec6e98e381
+ - ensure changelog has default setting at the beginning of spec (31f81e262440aa10efafd90c74d98569df418795
+ - changed spy on changelog.generate() to stub, to avoid polluting following tests (0aa35588cf944b2f84b842d66220d50e8f5d96a8
+ - added test for .writeChageLog() and .organizeCommits() (b07f28e1e92bdf20be669596651b344d2f70855e
+ - added default mocha options (595c8347fd4e2b697ceac247babe7ece7c90c4fa
+ - added missing done() callback on .catch() (0da53e9c8ad8a967753ac06dc1c23302c7956017
+ - added tests for tag option equals to false (1fc1e809dcca7d499f870c314d2860121fcb6bab
+ - Added unit tests for commit parsing (504a61a715ed541feee4570810c2153ba8984420
+ - **writechangelog**
+ - updated test to reflect changes to method (b999948f2c38f5d002fa0dc535429a80acdf2d75)
+
+
+
+## Chore
+ - updated grunt contrib clean (e28c0c763b7953861c05bcbedf04c3d6d48f8243
+ - Remove grunt from peer dependencies (f6111d31f0c70f8368d2a57ea708bf58990f6bfd
+ - Updated jshint (1d5f6b1d471e9d48ac2b4c7c8b78e3e5a8021ff4
+ - typos and grammar (5ae2ee52d1f096d375d077299047684eae2cd5e2
+ - a couple of spelling corrections [ci skip] (1486a84537c5fd2d7997721820981c7949487af2
+ - minor edits to README (481c6c80d49e5e11c72d8378976d5d3ee1d581d2
+ - fixing lint errors (3a8e8d486a2b89b9f04d01200fe4f9f7851d0123
+ - added chai-as-promise to handle methods that return promises (1d3842576839b763b28a777e96b061dbd4d01a80
+ - updated travis config (d6a7ef945f600ec787b515486bd3abfa2f86a25b
+ - stopped tracking test output files (1d12bccb9f7dce07ff45318304dc5ab82620b6f1
+ - added istanbul configuration file (88c945e6d8ddddfe6ee3bdf808ae2c749b4eabf3
+ - updated travis configuration for code climate (fbd651dd765a1ee26293dd03543e578181462e3f
+ - fixed lint issues in tests (2edb019910a421cd94868397a0f5881e90af4ed5
+ - add tests to lint task (1d789792143d2f68820c16426e772857e45ba181
+ - add lint rules for mocha test (bbea9341acb37f729e7f83d59d784cb4ff7969e1
+ - ignore files generated by tests (3ccbff47ee2dd655da95ea3a9b95cb156f8f6956
+ - update dependencies (3036d8037f4af6aa34fb137037a9eb9d0ce34297
+ - removed unused dependency (cdd9f0d5623f839eaaf646d4de0cf72816cf00af
+ - fixed typo (081a8f963104711b5f15bb8468489ee13927e226
+ - added commits fixture for tests (b7d16b682a8167cd4a90e59c4f511774f6572ce1
+ - added missing development dependencies (e52e3ec6234db4cc9055c6e0abd5f32b587f67d6
+ - adding missing newline at the end of file (da4b54920e1be490fb47a25906eece63229b0094
+ - removed testing from grunt file (causing recursion issues during some tests) (8e94e8ac23e73709495cf0c6851fbaf1a84c0c9b
+ - install mocha before travis scripts (9be62aaeb7d50959cff870e0cabb08277d1c512b
+ - updated npm scripts and added debug (aa4f2a2d7b834484f65239ceccdf4f973dbe0cee
+ - moved fixtures to the test folder (e59d429b032451f75ef986e2d1b3c63fb8672a1c
+ - removed unused test/hacky.js (500fdf3c37e72c98f4809806e85926035eb46792
+ - rename changelog.spec.js to match file being tested (417578507b39aeffe826922ad3eccfcc13ad6ed0
+ - fixed lint errors (71a5eae2212e7abf87c97a569f8251a56b5474a6
+ - added grunt coverage task (ef6cf2cf14b69fe4200eb0eeb9319fb4bcdffcc2
+ - added node.js `0.12` to travis-ci config (24d9c58a0a4ea349709719c431ca9878a2f01bc4
+ - Updated readme (fca6ecbac686661ece15acdb41d23e86011457f2
+ - package json version 1.1.3 (9d6003868e352ae21383913f671bc091afc9d8c7
+ - **cleanup**
+ - remove unnecessary code [skip ci] (80dbe3ec7a28e7c20d99e89009856c70138350b0) - remove `#getStream` and `#checkPath` (cd75ebc44e39242b7e9c8ef2363c86d3f1cabc0e)
+ - **deps**
+ - install fs-extra@0.18.4 (7c8e257b81f0daeba7e347d175583af1a7a9bfa0)
+ - **images**
+ - add logo in JPEG format (50338b9a8b5540e42273857448e803d8b85c689d) - add logo in PNG format (bb5fbbdba7ef2b9466c185c12ef426d82fe25bcf)
+ - **lint**
+ - add missing semicolon (2888af4803f85da1afbb8c9832314f53cc4ca131) - fix indentation (4cf9b6e69a1426d48f18da45614f8f01994707b7) - have jshint ignore false positives (ed8e9df48720c42086186fa4219262a351bbc3e4) - fixing jshint errors (987366f02517c9cfdb62264d0f6ea7d0b20d6634)
+ - **package**
+ - Package json version (990b8ea04ca04f3c907653b0fa89ae6ddd601092)
+ - **package.json**
+ - Added preversion script (b3f1e44a900b00bda1facaee5354ba1ff58166aa)
+ - **release**
+ - 1.0.0 codename(magnificent-goldman) (6b836fbea9405727bfc6d8e83349ea5cf8965b05) - 0.1.8 codename(furious-stallman) (b943231854ffd6cb0c5f32e5482cadd99c96f3e9)
+ - **task**
+ - cleanup unused requires (8a41d4e7b245b2698749279765bcef4748e18ac7)
+
+
+
+
+---
+*Generated with [git-changelog](https://github.com/rafinskipg/git-changelog). If you have any problems or suggestions, create an issue.* :) **Thanks**
diff --git a/output/tag1.md b/output/tag1.md
index cd884a1..987710c 100644
--- a/output/tag1.md
+++ b/output/tag1.md
@@ -1,82 +1,111 @@
-__Since tag 1 changelog__
+# Since tag 1 changelog
-# squeezy potatoe (2016-07-29)
+_This changelog is from the previous tag_
+## v0.0.1 ( Sun Dec 25 2016 13:33:21 GMT+0100 (CET) )
----
-
## Bug Fixes
-
-- Fix generation of logs
+ - fix error messages
+ ([ee5068bf](https://github.com/rafinskipg/git-changelog/commit/ee5068bffdbb9c0e45c8ce9ce0c2f790440f19e3))
+ - Fix generation of logs
([cddb2408](https://github.com/rafinskipg/git-changelog/commit/cddb2408fa3017be704acac51dabbba9f477a547))
-- correctly get branch name from the command line
+ - correctly get branch name from the command line
([4baa075b](https://github.com/rafinskipg/git-changelog/commit/4baa075bd93f878ee708817f911fe89c102dec02))
-- correctly detect when running under grunt on Windows
+ - correctly detect when running under grunt on Windows
([4205ea49](https://github.com/rafinskipg/git-changelog/commit/4205ea49a893e4d1807a39268739c13754d40cf2))
-- fixed tests
+ - fixed tests
([2e60172a](https://github.com/rafinskipg/git-changelog/commit/2e60172a4666c70d27e66d15dad297b89fff9583))
-- Stream didn't close properly
+ - Stream didn't close properly
([99f228cf](https://github.com/rafinskipg/git-changelog/commit/99f228cfa5cb26c46ef9e3b00171a5e3d38fd844))
-- Github commit url
+ - Github commit url
([c186f2d8](https://github.com/rafinskipg/git-changelog/commit/c186f2d877e7907305953610bcaaef331406178a))
-- **checkpath:** add missing require('path')
+
+ - **checkpath**
+ - add missing require('path')
([e5dab826](https://github.com/rafinskipg/git-changelog/commit/e5dab826062bd22dd37c8c3d3c24a4d9b4701f6d))
-- **generate:** create path to file if it does not already exist
+
+ - **generate**
+ - create path to file if it does not already exist
([62f6210f](https://github.com/rafinskipg/git-changelog/commit/62f6210f6895bcf5f9984b26948178b1a93cbc9e))
-- **git log:** Ignores letter case
+
+ - **git log**
+ - Ignores letter case
([d4cff0a8](https://github.com/rafinskipg/git-changelog/commit/d4cff0a86c5ce46405f3c0dd03f9c49a7d620792),
[#54](https://github.com/rafinskipg/git-changelog/issues/54))
-- **git_changelog_generate:** pass tag if it exists to gitReadLog
+
+ - **git tag**
+ - get latest tag, regardless of branch for workflows that rely on git-flow releases
+ ([48800306](https://github.com/rafinskipg/git-changelog/commit/48800306fa5ac19b7e9a4c6d7f2f432ee8ae4d84))
+
+ - **git_changelog_generate**
+ - pass tag if it exists to gitReadLog
([7c801927](https://github.com/rafinskipg/git-changelog/commit/7c801927672792fc9a818653b74c78d77c7bff9e),
[#5](https://github.com/rafinskipg/git-changelog/issues/5))
-- **nested lists:** nested list fix. Closes #9
+
+ - **nested lists**
+ - nested list fix. Closes #9
([22855518](https://github.com/rafinskipg/git-changelog/commit/2285551810919bd4d8a749ae3ddd88f9cedcdd0e),
[#9](https://github.com/rafinskipg/git-changelog/issues/9))
-- **options:** use repo_url instead of url
+
+ - **options**
+ - Use version_name instead of version
+ ([43fdac85](https://github.com/rafinskipg/git-changelog/commit/43fdac855bfd2f67a43acc93ecc8ef2e7a81f45c))
+ - use repo_url instead of url
([346b3949](https://github.com/rafinskipg/git-changelog/commit/346b39491923a49a3421f174a566b204d5fc7db9))
-- **package.json:** move q to dependancies since it is required to run
+
+ - **package.json**
+ - move q to dependancies since it is required to run
([257119cf](https://github.com/rafinskipg/git-changelog/commit/257119cf2bb6d8f341a5d65a2f47bcf803dff205))
-- **params:** Restores versionName in CLI
+
+ - **params**
+ - Restores versionName in CLI
([1d97f952](https://github.com/rafinskipg/git-changelog/commit/1d97f952bd5d37f67c1febdf161f4ce9b310eebf))
-## Pull requests merged
-- Merge pull request #55 from kerimdzhanov/patch-1
+
+## Pull requests merged
+ - Merge pull request #60 from seivan/feature/latest_tag_regardless_of_branch
+ ([1ff50d0d](https://github.com/rafinskipg/git-changelog/commit/1ff50d0dc03f8c0db9961c034945c3ef8f4268f7))
+ - Merge pull request #58 from olamothe/master
+ ([3fed7270](https://github.com/rafinskipg/git-changelog/commit/3fed727077168815f24aad7bbf5768913e3843ab))
+ - Merge pull request #55 from kerimdzhanov/patch-1
([31d13896](https://github.com/rafinskipg/git-changelog/commit/31d1389637b59ac3a6c68c3f8fca99045675c36c))
-- Merge pull request #50 from rafinskipg/changelogrc
+ - Merge pull request #50 from rafinskipg/changelogrc
([fd07a4bf](https://github.com/rafinskipg/git-changelog/commit/fd07a4bf039c7c8ddbb496c644dfd5fcc1627904))
-- Merge pull request #41 from pmiossec/fix_branch_option
+ - Merge pull request #41 from pmiossec/fix_branch_option
([6247118a](https://github.com/rafinskipg/git-changelog/commit/6247118a573259cbe71c6fdd28cb53dcb7f1b855))
-- Merge pull request #45 from xcambar/versionName
+ - Merge pull request #45 from xcambar/versionName
([2e50373a](https://github.com/rafinskipg/git-changelog/commit/2e50373a6f42e53598612f0e474c008624d6e80c))
-- Merge pull request #47 from Sjors/patch-1
+ - Merge pull request #47 from Sjors/patch-1
([d786fd08](https://github.com/rafinskipg/git-changelog/commit/d786fd084d7c1c250c866bec3c5d0c73b9abe271))
-- Merge pull request #46 from zoner14/master
+ - Merge pull request #46 from zoner14/master
([0485a1fd](https://github.com/rafinskipg/git-changelog/commit/0485a1fd4bf01662f50b93098c6b535eb7c527eb))
-- Merge pull request #37 from richardthombs/fix-grunt-on-windows
+ - Merge pull request #37 from richardthombs/fix-grunt-on-windows
([5f024339](https://github.com/rafinskipg/git-changelog/commit/5f02433963b5b603c5763bd5c1a37cf8ca9e3598))
-- Merge pull request #33 from richardthombs/fix-typos
+ - Merge pull request #33 from richardthombs/fix-typos
([2656d150](https://github.com/rafinskipg/git-changelog/commit/2656d150eb95c6ad9326e4265ba64edf8e49a11c))
-- Merge pull request #30 from JohnnyEstilles/refactor/get-stream
+ - Merge pull request #30 from JohnnyEstilles/refactor/get-stream
([a52b1169](https://github.com/rafinskipg/git-changelog/commit/a52b1169a2510d83d6d4fd5113ce157f30c4d4d0))
-- Merge pull request #25 from JohnnyEstilles/code-climate
+ - Merge pull request #25 from JohnnyEstilles/code-climate
([28053b92](https://github.com/rafinskipg/git-changelog/commit/28053b9292d3d61fb33a004f6088c244e653b76b))
-- Merge pull request #23 from JohnnyEstilles/docs/readme-updates
+ - Merge pull request #23 from JohnnyEstilles/docs/readme-updates
([3079151a](https://github.com/rafinskipg/git-changelog/commit/3079151a8d5f90d0830aab4437a65dff4d837b2a))
-- Merge pull request #20 from JohnnyEstilles/feature/code-refactoring
+ - Merge pull request #20 from JohnnyEstilles/feature/code-refactoring
([be209f04](https://github.com/rafinskipg/git-changelog/commit/be209f04c22f1ce2cb82e6412c4ddf117897a9e7))
-- Merge pull request #12 from jodybrewster/master
+ - Merge pull request #12 from jodybrewster/master
([219ea809](https://github.com/rafinskipg/git-changelog/commit/219ea8091ac81a55b0210c9a7fd41a7f0ee5660f))
-- Merge pull request #7 from colegleason/fix-tags
+ - Merge pull request #7 from colegleason/fix-tags
([1d4f6043](https://github.com/rafinskipg/git-changelog/commit/1d4f604363094d4eee3b4d7b1ca01133edaad344))
-- Merge pull request #6 from colegleason/add-q
+ - Merge pull request #6 from colegleason/add-q
([2a712b9c](https://github.com/rafinskipg/git-changelog/commit/2a712b9cfd912f36b6f7f70d16b336575881881a))
+
+
---
-*Generated with [git-changelog](https://github.com/rafinskipg/git-changelog). If you have any problems or suggestions, create an issue.* :) **Thanks**
\ No newline at end of file
+*Generated with [git-changelog](https://github.com/rafinskipg/git-changelog). If you have any problems or suggestions, create an issue.* :) **Thanks**
diff --git a/tasks/command.js b/tasks/command.js
index c834552..838885b 100755
--- a/tasks/command.js
+++ b/tasks/command.js
@@ -18,6 +18,7 @@ if (process.argv.join('').replace(/\\/g,'/').indexOf('/grunt') === -1) {
.option('-a, --app_name [app_name]', 'Name [app_name]')
.option('-b, --branch [branch]', 'Branch name [branch]')
.option('-f, --file [file]', 'File [file]')
+ .option('-tpl, --template [template]', 'Template [template]')
.option('-r, --repo_url [repo_url]', 'Repo url [repo_url]')
.option('-l, --logo [logo]', 'Logo path [logo]')
.option('-i, --intro [intro]', 'intro text [intro]')
@@ -35,7 +36,7 @@ if (process.argv.join('').replace(/\\/g,'/').indexOf('/grunt') === -1) {
}
if (program.version_name){
- options.versionName = program.version_name;
+ options.version_name = program.version_name;
}
if (program.app_name){
@@ -55,6 +56,10 @@ if (process.argv.join('').replace(/\\/g,'/').indexOf('/grunt') === -1) {
options.file = program.file;
}
+ if (program.template){
+ options.template = program.template;
+ }
+
if (program.changelogrc){
options.changelogrc = program.changelogrc;
}
diff --git a/tasks/defaults.js b/tasks/defaults.js
index fb8f70c..5bc5a76 100644
--- a/tasks/defaults.js
+++ b/tasks/defaults.js
@@ -3,13 +3,14 @@ module.exports = {
branch : '',
//[G]ithub [B]itbucket supported at the momment
repo_url: '',
- version : '',
+ version_name : '',
file: 'CHANGELOG.md',
app_name : 'My app - Changelog',
tag: null,
logo : null,
intro : null,
debug: false,
+ template: 'templates/template.md',
changelogrc : '.changelogrc',
sections: [
{
diff --git a/tasks/git_changelog_generate.js b/tasks/git_changelog_generate.js
index 33e00ed..6a0b501 100644
--- a/tasks/git_changelog_generate.js
+++ b/tasks/git_changelog_generate.js
@@ -19,6 +19,7 @@ Changelog.prototype.setDefaults = require('./lib/set-defaults');
Changelog.prototype.message = require('./lib/message');
Changelog.prototype.getProviderLinks = require('./lib/get-provider-links');
Changelog.prototype.loadChangelogRc = require('./lib/load-changelog-rc');
+Changelog.prototype.loadTemplate = require('./lib/load-template');
Changelog.prototype.getGitLogCommands = require('./lib/get-gitlog-commands');
Changelog.prototype.parseRawCommit = require('./lib/parse-raw-commit');
Changelog.prototype.linkToIssue = require('./lib/link-to-issue');
@@ -26,6 +27,7 @@ Changelog.prototype.linkToCommit = require('./lib/link-to-commit');
Changelog.prototype.currentDate = require('./lib/current-date');
Changelog.prototype.printHeader = require('./lib/print-header');
Changelog.prototype.printSection = require('./lib/print-section');
+Changelog.prototype.printCommit = require('./lib/print-commit');
Changelog.prototype.printSalute = require('./lib/print-salute');
Changelog.prototype.readGitLog = require('./lib/read-gitlog');
Changelog.prototype.writeChangelog = require('./lib/write-change-log');
diff --git a/tasks/lib/generate.js b/tasks/lib/generate.js
index 599cc64..4934d7f 100644
--- a/tasks/lib/generate.js
+++ b/tasks/lib/generate.js
@@ -1,30 +1,19 @@
'use strict';
var debug = require('debug')('changelog:generate');
-var q = require('q');
-var fse = require('fs-extra');
-
-function generateFromCommits(deferred, commits, sections) {
- var stream;
+function generateFromCommits(commits, sections) {
this.message('parsed commits', commits.length);
this.log('debug', 'Parsed', commits.length, 'commits');
- this.log('info','Generating changelog to', this.options.file || 'stdout', '(', this.options.version, ')');
-
- if (this.options.file) {
- stream = fse.createOutputStream(this.options.file);
- } else {
- stream = process.stdout;
- }
+ this.log('info','Generating changelog to', this.options.file || 'stdout', '(', this.options.version_name, ')');
- this.writeChangelog(stream, commits, sections)
- .then(deferred.resolve.bind(deferred, this.options));
+ return this.writeChangelog(commits, sections);
}
-function generateFromTag(deferred, tag) {
+function generateFromTag(tag) {
var readGitLog;
-
- if (typeof(tag) !== 'undefined' && tag !== false) {
+
+ if (typeof(tag) !== 'undefined' && tag && tag !== false) {
this.log('info', 'Reading git log since', tag);
this.message('since tag', tag);
readGitLog = this.readGitLog.bind(this, this.cmd.gitLog, tag);
@@ -34,25 +23,25 @@ function generateFromTag(deferred, tag) {
readGitLog = this.readGitLog.bind(this, this.cmd.gitLogNoTag);
}
- readGitLog()
- .then(generateFromCommits.bind(this, deferred))
+ return readGitLog()
+ .then(generateFromCommits.bind(this))
.catch(console.log.bind(console, 'error'));
}
function generate(params, loadRC) {
debug('generating ...');
var self = this;
- var deferred = q.defer();
- this.init(params, loadRC)
+ return this.init(params, loadRC)
.then(this.getPreviousTag.bind(this))
- .then(generateFromTag.bind(this, deferred))
+ .then(generateFromTag.bind(this))
+ .then(function(){
+ return self.options;
+ })
.catch(function(err){
self.log('error', err);
- deferred.reject(err);
+ throw(err);
});
-
- return deferred.promise;
}
module.exports = generate;
diff --git a/tasks/lib/get-previous-tag.js b/tasks/lib/get-previous-tag.js
index e5e06d2..c4b3020 100644
--- a/tasks/lib/get-previous-tag.js
+++ b/tasks/lib/get-previous-tag.js
@@ -2,32 +2,33 @@
var debug = require('debug')('changelog:getPreviousTag');
var child = require('child_process');
-var q = require('q');
-function cmdDone(deferred, code, stdout, stderr) {
+function cmdDone(resolve, reject, code, stdout, stderr) {
debug('returning from git tag');
+ //I think this command it's actually not working and always return empty
+ // Consider trying git describe --abbrev=0 --tags
if (code) {
- deferred.reject();
+ reject();
} else {
- deferred.resolve(stdout.replace('\n', ''));
+ resolve(stdout.replace('\n', ''));
}
}
function getPreviousTag() {
- var deferred = q.defer();
+ var module = this;
- if (this.options.tag) {
- deferred.resolve(this.options.tag);
- } else if (this.options.tag === false) {
- deferred.resolve(false);
- } else {
- this.log('debug', 'Getting last tag');
- //IF we dont find a previous tag, we get all the commits from the beggining - The bigbang of the code
- debug('calling git tag command');
- child.exec(this.cmd.gitTag, cmdDone.bind(null, deferred));
- }
-
- return deferred.promise;
+ return new Promise(function(resolve, reject){
+ if (module.options.tag) {
+ resolve(module.options.tag);
+ } else if (module.options.tag === false) {
+ resolve(false);
+ } else {
+ module.log('debug', 'Getting last tag');
+ //IF we dont find a previous tag, we get all the commits from the beggining - The bigbang of the code
+ debug('calling git tag command');
+ child.exec(module.cmd.gitTag, cmdDone.bind(null, resolve, reject));
+ }
+ });
}
module.exports = getPreviousTag;
diff --git a/tasks/lib/get-repo-url.js b/tasks/lib/get-repo-url.js
index be1fc53..999af7f 100644
--- a/tasks/lib/get-repo-url.js
+++ b/tasks/lib/get-repo-url.js
@@ -7,7 +7,7 @@ var q = require('q');
function cmdDone(deferred, code, stdout, stderr) {
debug('returning git repo url command');
if (code) {
- deferred.reject();
+ deferred.reject("Sorry, you've not configured an origin remote or passed a `repo_url` config value");
} else {
stdout = stdout.replace('\n', '').replace('.git', '');
deferred.resolve(stdout);
diff --git a/tasks/lib/init-options.js b/tasks/lib/init-options.js
index 53306d9..d97d8ea 100644
--- a/tasks/lib/init-options.js
+++ b/tasks/lib/init-options.js
@@ -15,10 +15,11 @@ function initOptions(params) {
this.message('name', this.options.app_name);
this.message('intro', this.options.intro);
this.message('file', this.options.file);
+ this.message('template', this.options.template);
this.message('logo', this.options.logo);
this.message('sections', this.options.sections);
this.message('debug', this.options.debug);
- this.message('version', this.options.version);
+ this.message('version_name', this.options.version_name);
this.message('changelogrc', this.options.changelogrc);
}
diff --git a/tasks/lib/init.js b/tasks/lib/init.js
index a2a8b4a..7ef85b7 100644
--- a/tasks/lib/init.js
+++ b/tasks/lib/init.js
@@ -16,7 +16,7 @@ function getRepoSuccess(deferred, url) {
function getRepoFailure(deferred, err) {
this.message('not remote');
- deferred.reject("Sorry, you've not configured an origin remote or passed a `repo_url` config value");
+ deferred.reject(err);
}
function init(params, loadRC) {
@@ -35,13 +35,14 @@ function init(params, loadRC) {
module.log('info', ' - The APP name is', module.options.app_name);
module.log('info', ' - The output file is', module.options.file);
+ module.log('info', ' - The template file is', module.options.template);
module.options.grep_commits = module.options.sections.map(function(section) {
return section.grep;
}).join('|');
module.log('debug', 'Grep commits: ', module.options.grep_commits);
-
+
return module.getRepoUrl();
})
.then(getRepoSuccess.bind(this, deferred))
diff --git a/tasks/lib/load-changelog-rc.js b/tasks/lib/load-changelog-rc.js
index 77928fa..629d117 100644
--- a/tasks/lib/load-changelog-rc.js
+++ b/tasks/lib/load-changelog-rc.js
@@ -5,7 +5,7 @@ var q = require('q'),
fs = require('fs');
function readChangelogRcFile(changelogrc, logger) {
- debug('returning git repo url command');
+ debug('finding changelogrc file');
if(!changelogrc){
return q.reject();
@@ -40,8 +40,8 @@ function loadChangelogRc() {
deferred.resolve(contents);
}catch(e){
- module.log('warn', 'Invalid changelogrc file', e);
- return deferred.reject(e);
+ module.log('error', 'Invalid changelogrc file', e);
+ return deferred.reject('Invalid changelogrc file' + e);
}
})
@@ -50,7 +50,7 @@ function loadChangelogRc() {
return section.title;
}).join(', ');
- module.log('warn', 'No .changelog.rc file found, using default settings');
+ module.log('error', 'No .changelog.rc file found, using default settings');
module.log('info', 'Sections: ', sectionNames);
deferred.resolve({});
}.bind(this));
diff --git a/tasks/lib/load-template.js b/tasks/lib/load-template.js
new file mode 100644
index 0000000..2de5751
--- /dev/null
+++ b/tasks/lib/load-template.js
@@ -0,0 +1,87 @@
+'use strict';
+
+var debug = require('debug')('changelog:loadTemplateFile');
+var q = require('q');
+var _ = require('lodash');
+var fs = require('fs');
+
+
+function loadDefaultTemplate(logger){
+ return new Promise(function(resolve, reject){
+
+ debug('loading default template');
+
+ fs.readFile(__dirname +'/../../templates/template.md', 'utf8', function(err, data){
+ if (err) {
+ logger('error', 'No default template found', err);
+ resolve(null);
+ }else{
+ logger('info', 'Found default template');
+ resolve(data);
+ }
+ });
+
+ });
+}
+
+
+function readTemplateFile(template, logger) {
+ debug('finding template file');
+
+ if(!template){
+ return Promise.resolve(null);
+ }
+
+ var dfd = q.defer();
+
+ fs.readFile(template, 'utf8' ,function (err, data) {
+ if (err) {
+ logger('error', 'No custom template found', err);
+ loadDefaultTemplate(logger)
+ .then(dfd.resolve)
+ .catch(dfd.reject);
+ }else{
+ logger('info', 'Found template');
+ dfd.resolve(data);
+ }
+ });
+
+ return dfd.promise;
+}
+
+
+function loadTemplateFile(data) {
+ this.log('debug','loading template from', this.options.template);
+
+ var module = this;
+
+ var viewHelpers = {
+ getCommitLinks: function(commit){
+ return module.linkToCommit(commit.hash);
+ },
+ getCommitCloses: function(commit){
+ return commit.closes.map(module.linkToIssue, module);
+ },
+ printCommit: this.printCommit.bind(this)
+ };
+
+ _.extend(data, viewHelpers);
+
+ return readTemplateFile(this.options.template, this.log.bind(this))
+ .then(function(contents){
+ if(contents){
+ try{
+ var fn = _.template(contents, data);
+ var tpl = fn(data);
+ return tpl;
+ }catch(e){
+ module.log('error', 'Invalid template file', e);
+ throw 'Invalid template file \n' + e;
+ }
+ }else{
+ return null;
+ }
+ });
+}
+
+module.exports = loadTemplateFile;
diff --git a/tasks/lib/organize-commits.js b/tasks/lib/organize-commits.js
index a0c23e9..198379d 100644
--- a/tasks/lib/organize-commits.js
+++ b/tasks/lib/organize-commits.js
@@ -2,6 +2,7 @@
var debug = require('debug')('changelog:organizeCommits');
var format = require('util').format;
+var _ = require('lodash');
function grepSection(sections, commit){
//TODO: MONKEY METHOD, please use the regexp greps
@@ -21,25 +22,78 @@ function organizeCommit(sections, commit) {
var section = commit.type ? sections[commit.type] : grepSection(sections, commit) ;
var component = commit.component ? commit.component.toLowerCase() : this.emptyComponent;
+
if (section) {
- section[component] = section[component] || [];
- section[component].push(commit);
+ section.commitsCount++;
+
+ if(component === this.emptyComponent){
+ section.commits.push(commit);
+ }else{
+ section.components[component] = section.components[component] || [];
+ section.components[component].push(commit);
+ }
}
if (commit.breaking) {
- sections.BREAKING[component] = sections.BREAKING[component] || [];
- sections.BREAKING[component].push({
+ //Add it to the breaking list))
+ sections.BREAKING.commitsCount++;
+ var breakingCommit = {
subject: format("due to %s,\n %s", this.linkToCommit(commit.hash), commit.breaking),
hash: commit.hash,
closes: []
- });
+ };
+
+ if(component === this.emptyComponent){
+ sections.BREAKING.commits.push(breakingCommit);
+ }else{
+ sections.BREAKING.components[component] = sections.BREAKING.components[component] || [];
+ sections.BREAKING.components[component].push(breakingCommit);
+ }
}
}
-function organizeCommits(commits, sections) {
+function organizeCommits(commits, defaultSections) {
+ commits = commits ? commits : [];
+
+ var sections = {
+ BREAKING : {
+ components: {},
+ commitsCount: 0,
+ title: 'Breaking Changes',
+ commits: [],
+ type: 'BREAKING',
+ printCommitLinks: false
+ }
+ };
+
+ defaultSections.forEach(function(sectionInfo){
+ var sectionType = sectionInfo.grep.replace('^', '');
+
+ sections[sectionType] = {
+ title: sectionInfo.title,
+ components: {},
+ commits: [],
+ commitsCount: 0,
+ type: sectionType,
+ printCommitLinks: sectionInfo.printCommitLinks === false ? false : true
+ };
+ });
+
debug('organizaing commits');
+
commits.forEach(organizeCommit.bind(this, sections), this);
- return sections;
+
+ return _.compact(Object.keys(sections).map(function(key){
+ var section = sections[key];
+
+ section.components = Object.keys(section.components).sort().map(function(key){
+ return { name: key,
+ commits: section.components[key]
+ };
+ });
+
+ return section.commitsCount > 0 ? section : null;
+ }));
}
module.exports = organizeCommits;
diff --git a/tasks/lib/print-commit.js b/tasks/lib/print-commit.js
new file mode 100644
index 0000000..3b3d349
--- /dev/null
+++ b/tasks/lib/print-commit.js
@@ -0,0 +1,23 @@
+
+var debug = require('debug')('changelog:printSection');
+var format = require('util').format;
+
+function printCommit(commit, printCommitLinks) {
+ var prefix = '';
+ var result = '';
+
+ if (printCommitLinks) {
+ result += format('%s\n (%s', commit.subject, this.linkToCommit(commit.hash));
+
+ if (commit.closes.length) {
+ result += ',\n ' + commit.closes.map(this.linkToIssue, this).join(', ');
+ }
+ result += ')\n';
+ } else {
+ result += format('%s\n', commit.subject);
+ }
+
+ return result;
+}
+
+module.exports = printCommit;
\ No newline at end of file
diff --git a/tasks/lib/print-header.js b/tasks/lib/print-header.js
index 8c8845b..607cfd3 100644
--- a/tasks/lib/print-header.js
+++ b/tasks/lib/print-header.js
@@ -7,7 +7,7 @@ var format = require('util').format;
var logoTemplate = '
\n\n';
var titleTemplate = '__%s__\n\n';
var subtitleTemplate = '_%s_\n\n';
-var versionTemplate = '# %s %s (%s)\n\n';
+var versionTemplate = '# %s (%s)\n\n';
function printHeader(stream, options, date) {
@@ -22,7 +22,7 @@ function printHeader(stream, options, date) {
stream.write(format(subtitleTemplate, options.intro));
}
- stream.write(format(versionTemplate, options.version || '', options.versionName || '', date));
+ stream.write(format(versionTemplate, options.version_name || '', date));
stream.write('\n\n---\n');
}
diff --git a/tasks/lib/print-section.js b/tasks/lib/print-section.js
index bf64820..75a6563 100644
--- a/tasks/lib/print-section.js
+++ b/tasks/lib/print-section.js
@@ -3,7 +3,7 @@
var debug = require('debug')('changelog:printSection');
var format = require('util').format;
-function printCommit(stream, printCommitLinks, prefix, commit) {
+function printCommitStream(stream, printCommitLinks, prefix, commit) {
if (printCommitLinks) {
stream.write(format('%s %s\n (%s', prefix, commit.subject, this.linkToCommit(commit.hash)));
@@ -16,36 +16,41 @@ function printCommit(stream, printCommitLinks, prefix, commit) {
}
}
-function printComponent(stream, section, printCommitLinks, name) {
+function printComponent(stream, printCommitLinks, component) {
var prefix = '-';
- var nested = section[name].length > 1;
-
- if (name !== this.emptyComponent) {
- if (nested) {
- stream.write(format('- **%s:**\n', name));
- prefix = ' -';
- } else {
- prefix = format('- **%s:**', name);
- }
+
+ var nested = component.commits.length > 1;
+ if (nested) {
+ stream.write(format('- **%s:**\n', component.name));
+ prefix = ' -';
+ } else {
+ prefix = format('- **%s:**', component.name);
}
- section[name].forEach(printCommit.bind(this, stream, printCommitLinks, prefix), this);
+ component.commits.forEach(printCommitStream.bind(this, stream, printCommitLinks, prefix), this);
}
-function printSection(stream, title, section, printCommitLinks) {
+function printSection(stream, section) {
+ try{
+
debug('printing section ...');
- printCommitLinks = printCommitLinks === undefined ? true : printCommitLinks;
- var components = Object.keys(section).sort();
- if (!components.length) {
+ if (!section.commits.length && !section.components.length) {
return;
}
- stream.write(format('\n## %s\n\n', title));
- components.forEach(printComponent.bind(this, stream, section, printCommitLinks), this);
+ stream.write(format('\n## %s\n\n', section.title));
+
+ section.commits.forEach(printCommitStream.bind(this, stream, section.printCommitLinks, '-'), this);
+
+ section.components.forEach(printComponent.bind(this, stream, section.printCommitLinks), this);
stream.write('\n');
+
+ }catch(e){
+ console.log(e);
+ }
}
module.exports = printSection;
diff --git a/tasks/lib/write-change-log.js b/tasks/lib/write-change-log.js
index c3b3f9e..7ebf297 100644
--- a/tasks/lib/write-change-log.js
+++ b/tasks/lib/write-change-log.js
@@ -2,45 +2,80 @@
var debug = require('debug')('changelog:writeChangelog');
var format = require('util').format;
-var q = require('q');
+var _ = require('lodash');
+var fse = require('fs-extra');
-function sendToStream(stream, sections, deferred) {
+function sendToStream(stream, sections) {
var module = this;
this.printHeader(stream, this.options, this.currentDate());
-
- this.options.sections.forEach(function(section){
- var sectionType = section.grep.replace('^', '');
- if(sectionType !== 'BREAKING'){
- module.printSection(stream, section.title, sections[sectionType]);
- }else if (sections.BREAKING[module.emptyComponent].length > 0 ) {
- module.printSection(stream, 'Breaking Changes', sections.BREAKING, false);
- }
+
+ sections.forEach(function(section){
+ module.printSection(stream, section);
});
this.printSalute(stream);
stream.end();
- stream.on('finish', deferred.resolve);
}
-function writeChangelog(stream, commits) {
+function writeChangelog(commits) {
+ var module = this;
+
debug('writing change log');
- var deferred = q.defer();
- var sections = {
- BREAKING : {}
+ var sections = this.organizeCommits(commits, this.options.sections);
+ var stream;
+
+ var data = {
+ logo: module.options.logo,
+ sections: sections,
+ intro: module.options.intro,
+ title: module.options.app_name,
+ version:{
+ number: module.options.tag,
+ name: module.options.version_name,
+ date: new Date()//Todo get the date of the tag
+ }
};
- this.options.sections.forEach(function(sectionInfo){
- var sectionType = sectionInfo.grep.replace('^', '');
- sections[sectionType] = {};
- });
+ return new Promise(function(resolve, reject){
+
+ module.loadTemplate(data)
+ .then(function(template){
+
+ if (module.options.file) {
+ stream = fse.createOutputStream(module.options.file);
+ } else {
+ stream = process.stdout;
+ }
+
+ if(template){
+ debug('Proceding with template');
- sections.BREAKING[this.emptyComponent] = [];
- this.organizeCommits(commits, sections);
- stream.on('open', sendToStream.bind(this, stream, sections, deferred));
+ stream.on('open', function(){
+ var lines = template.split('\n');
- return deferred.promise;
+ lines.forEach(function(line){
+ stream.write(line);
+ stream.write('\n');
+ });
+
+ stream.end();
+ stream.on('finish', resolve);
+ });
+ }else{
+ debug('Proceding with legacy output');
+
+ stream.on('open', sendToStream.bind(module, stream, sections));
+ stream.on('finish', resolve);
+ }
+
+ })
+ .catch(reject);
+ });
}
+
+
+
module.exports = writeChangelog;
diff --git a/templates/template.md b/templates/template.md
new file mode 100644
index 0000000..576cf38
--- /dev/null
+++ b/templates/template.md
@@ -0,0 +1,15 @@
+<% if(logo) { %>
<%= '\n\n' %><% } %># <%= title %>
+<% if(intro) { %><%= '\n' %>_<%= intro %>_<%= '\n' %><% } %>
+<% if(version && (version.name || version.number)) { %>##<% if(version.name){%><%= version.name %><% } %> <%= version.number %> <% if(version.date){ %>( <%= version.date %> )<% } %><%= '\n' %><% } %>
+<% _.forEach(sections, function(section){
+ if(section.commitsCount > 0) { %>
+## <%= section.title %>
+<% _.forEach(section.commits, function(commit){ %> - <%= printCommit(commit, true) %><% }) %>
+<% _.forEach(section.components, function(component){ %> - **<%= component.name %>**
+<% _.forEach(component.commits, function(commit){ %> - <%= printCommit(commit, true) %><% }) %>
+<% }) %>
+<% } %>
+<% }) %>
+
+---
+*Generated with [git-changelog](https://github.com/rafinskipg/git-changelog). If you have any problems or suggestions, create an issue.* :) **Thanks**
\ No newline at end of file
diff --git a/templates/template_two.md b/templates/template_two.md
new file mode 100644
index 0000000..cca9294
--- /dev/null
+++ b/templates/template_two.md
@@ -0,0 +1,15 @@
+<% if(logo) { %>
<%= '\n\n' %><% } %># <%= title %>
+<% if(intro) { %><%= '\n' %>_<%= intro %>_<%= '\n' %><% } %>
+<% if(version) { %>## <%= version.name %> <%= version.number %> ( <%= version.date %> )<%= '\n' %><% } %>
+<% _.forEach(sections, function(section){
+ if(section.commitsCount > 0) { %>
+## <%= section.title %>
+<% _.forEach(section.commits, function(commit){ %> - <%= commit.subject %> (<%= commit.hash %><% if(commit.closes.length){ %>, Closes: <%= getCommitCloses(commit).join(',') %><% } %>
+<% }) %><% _.forEach(section.components, function(component){ %> - **<%= component.name %>**
+<% _.forEach(component.commits, function(commit){ %> - <%= commit.subject %> (<%= commit.hash %><% if(commit.closes.length){ %>, Closes: <%= getCommitCloses(commit).join(',') %><% } %>)<% }) %>
+<% }) %>
+<% } %>
+<% }) %>
+
+---
+*Generated with [git-changelog](https://github.com/rafinskipg/git-changelog). If you have any problems or suggestions, create an issue.* :) **Thanks**
\ No newline at end of file
diff --git a/test/changelogrc.spec.js b/test/changelogrc.spec.js
index 365500e..575a021 100644
--- a/test/changelogrc.spec.js
+++ b/test/changelogrc.spec.js
@@ -82,9 +82,10 @@ describe('changelogrc.spec.js', function() {
'BREAKING CHANGE: first breaking change\nsomething else\n' +
'another line with more info\n');
- var sections = {
- fix: {}
- };
+ var sections = [{
+ title: 'Bug Fixes',
+ grep: '^fix'
+ }];
var commits = [];
@@ -96,8 +97,8 @@ describe('changelogrc.spec.js', function() {
}
sections = changelog.organizeCommits(commits, sections);
-
- expect(sections.fix.mymodule.length).to.equal(10);
+ expect(sections[0].components[0].name).to.equal('mymodule');
+ expect(sections[0].components[0].commits.length).to.equal(10);
});
});
diff --git a/test/fixtures/commits.js b/test/fixtures/commits.js
index 0ab49b9..560ff99 100644
--- a/test/fixtures/commits.js
+++ b/test/fixtures/commits.js
@@ -84,7 +84,7 @@ exports.withBreaking = [
component: '$scope' },
{
closes: [],
- breaks: [],
+ breaks: [3, 4],
hash: '1d4f604363094d4eee3b4d7b1ca01133edaad344',
subject: 'did 4 thing',
body: '',
@@ -93,7 +93,7 @@ exports.withBreaking = [
},
{
closes: [],
- breaks: [],
+ breaks: [2,3],
hash: '1d4f604363094d4eee3b4d7b1ca01133edaad344',
subject: 'did 5 thing',
body: '',
diff --git a/test/git_changelog_generate.spec.js b/test/git_changelog_generate.spec.js
index 382ef03..5b44d4d 100644
--- a/test/git_changelog_generate.spec.js
+++ b/test/git_changelog_generate.spec.js
@@ -126,10 +126,10 @@ describe('git_changelog_generate.js', function() {
expect(changelog.options.msg).to.contain('debug: test');
});
- it('should store "version" if passed as an option', function() {
- changelog.initOptions({ version: 'test' });
- expect(changelog.options.version).to.equal('test');
- expect(changelog.options.msg).to.contain('version: test');
+ it('should store "version_name" if passed as an option', function() {
+ changelog.initOptions({ version_name: 'test' });
+ expect(changelog.options.version_name).to.equal('test');
+ expect(changelog.options.msg).to.contain('version_name: test');
});
it('should store any other option, but not save in msg', function() {
@@ -270,6 +270,16 @@ describe('git_changelog_generate.js', function() {
expect(msg.breaking).to.equal(' first breaking change\nsomething else\nanother line with more info\n');
});
+ it('should add everything as a message if there are 2 sections', function(){
+ var msg = changelog.parseRawCommit(
+ '13f31602f396bc269076ab4d389cfd8ca94b20ba\n'+
+ 'feat(ad): make new ad\n' +
+ 'some note here\n' +
+ 'reg(ad): need a walk through\n');
+
+ expect(msg.body).to.equals('some note here\nreg(ad): need a walk through\n');
+ });
+
it('should organize commits', function() {
var msg = changelog.parseRawCommit(
'13f31602f396bc269076ab4d389cfd8ca94b20ba\n' +
@@ -278,9 +288,10 @@ describe('git_changelog_generate.js', function() {
'BREAKING CHANGE: first breaking change\nsomething else\n' +
'another line with more info\n');
- var sections = {
- fix: {}
- };
+ var sections = [{
+ title: 'Bug Fixes',
+ grep: '^fix'
+ }];
var commits = [];
@@ -292,8 +303,8 @@ describe('git_changelog_generate.js', function() {
}
sections = changelog.organizeCommits(commits, sections);
-
- expect(sections.fix.mymodule.length).to.equal(10);
+ expect(sections[0].components[0].name).to.equal('mymodule');
+ expect(sections[0].components[0].commits.length).to.equal(10);
});
});
@@ -446,64 +457,44 @@ describe('git_changelog_generate.js', function() {
{
title: 'Breaking changes',
grep: 'BREAKING'
- }
+ }
];
before(function(done) {
- this.stream = {
- write: sinon.stub(),
- end : function(){
-
- },
- on: sinon.spy(function(event, callback) {
- callback();
- })
- };
+ this.timeout = 10000;
+
this.commits = require('./fixtures/commits.js').withoutBreaking;
- sinon.stub(changelog, 'organizeCommits');
sinon.stub(changelog, 'printSalute');
sinon.stub(changelog, 'printSection');
sinon.stub(changelog, 'printHeader');
- changelog.initOptions({ app_name: 'app', version: 'version', sections: sections });
- changelog.writeChangelog(this.stream, this.commits).then(function() {
+ changelog.initOptions({ app_name: 'app', version_name: 'version_name', sections: sections, template: false });
+ changelog.writeChangelog(this.commits)
+ .then(function() {
done();
+ })
+ .catch(function(err){
+ console.log('error', err);
});
});
after(function() {
- changelog.organizeCommits.restore();
changelog.printSection.restore();
changelog.printHeader.restore();
changelog.printSalute.restore();
});
- it('should organize commits', function() {
- expect(changelog.organizeCommits).to.have.been.calledOnce;
- expect(changelog.organizeCommits).to.have.been.calledWith(this.commits);
- });
-
it('should write the header to the stream', function() {
expect(changelog.printHeader).to.have.been.calledOnce;
- expect(changelog.printSalute).to.have.been.calledWith(this.stream);
});
- it('should print 7 sections', function() {
- expect(changelog.printSection.callCount).to.equal(7);
- sections.forEach(function(section, index) {
- var call = changelog.printSection.getCall(index);
- if(!call){
- expect(section.title).to.equals('Breaking changes');
- }else{
- expect(call.args).to.include(section.title);
- }
- });
+ it('should print 3 sections', function() {
+ expect(changelog.printSection.callCount).to.equal(3);
});
it('should print salute', function() {
expect(changelog.printSalute).to.have.been.calledOnce;
- expect(changelog.printSalute).to.have.been.calledWith(this.stream);
});
});
@@ -545,26 +536,43 @@ describe('git_changelog_generate.js', function() {
];
before(function(done) {
- this.stream = {
- write: sinon.stub(),
- end : function(){
-
- },
- on: sinon.spy(function(event, callback) {
- callback();
- })
- };
+
this.commits = require('./fixtures/commits.js').withBreaking;
sinon.stub(changelog, 'organizeCommits', function(commits, sections) {
- sections.BREAKING[changelog.emptyComponent] = [ 'breaking commit'];
+ return [{
+ type: 'BREAKING',
+ commits: [{
+ closes: [],
+ breaks: [],
+ hash: '1d4f604363094d4eee3b4d7b1ca01133edaad344',
+ subject: 'did 2 thing',
+ body: '',
+ type: 'feat',
+ component: '',
+ breaking: true
+ }],
+ components:[{
+ name: '$scope',
+ commits: [{
+ closes: [],
+ breaks: [],
+ hash: '1d4f604363012394d4eee3b4d7b1ca01133edaad344',
+ subject: 'did 4 thing',
+ body: '',
+ type: 'feat',
+ component: '$scope',
+ breaking: true
+ }]
+ }]
+ }];
});
sinon.stub(changelog, 'printSalute');
sinon.stub(changelog, 'printSection');
sinon.stub(changelog, 'printHeader');
- changelog.initOptions({ app_name: 'app', version: 'version', sections: sections });
- changelog.writeChangelog(this.stream, this.commits).then(function() {
+ changelog.initOptions({ app_name: 'app', version_name: 'version_name', sections: sections, template:false });
+ changelog.writeChangelog(this.commits).then(function() {
done();
});
});
@@ -583,20 +591,14 @@ describe('git_changelog_generate.js', function() {
it('should write the header to the stream', function() {
expect(changelog.printHeader).to.have.been.calledOnce;
- expect(changelog.printHeader).to.have.been.calledWith(this.stream, changelog.options);
});
- it('should print 8 sections', function() {
- expect(changelog.printSection.callCount).to.equal(8);
- sections.forEach(function(section, index) {
- var call = changelog.printSection.getCall(index);
- expect(call.args).to.include(section.title);
- });
+ it('should print 1 sections', function() {
+ expect(changelog.printSection.callCount).to.equal(1);
});
it('should print salute', function() {
expect(changelog.printSalute).to.have.been.calledOnce;
- expect(changelog.printSalute).to.have.been.calledWith(this.stream);
});
});
@@ -604,59 +606,89 @@ describe('git_changelog_generate.js', function() {
});
describe('.organizeCommits()', function() {
+ function findItem(key, value){
+ return function (item){
+ return item[key] === value;
+ };
+ }
describe('without breaking commits', function () {
before(function() {
changelog.setDefaults();
- this.sections = {
- fix: {},
- feat: {},
- BREAKING: {},
- style: {},
- refactor: {},
- test: {},
- chore: {},
- docs: {}
- };
+ this.sections = [
+ {
+ title: 'Bug Fixes',
+ grep: '^fix'
+ },
+ {
+ title: 'Features',
+ grep: '^feat'
+ },
+ {
+ title: 'Documentation',
+ grep: '^docs'
+ },
+ {
+ title: 'Breaking changes',
+ grep: 'BREAKING'
+ },
+ {
+ title: 'Refactor',
+ grep: '^refactor'
+ },
+ {
+ title: 'Style',
+ grep: '^style'
+ },
+ {
+ title: 'Test',
+ grep: '^test'
+ },
+ {
+ title: 'Chore',
+ grep: '^chore'
+ }
+ ];
+
this.commits = require('./fixtures/commits.js').withoutBreaking;
this.sections = changelog.organizeCommits(this.commits, this.sections);
});
- it('should return 8 sections', function() {
- expect(Object.keys(this.sections).length).to.equal(8);
+ it('should return 3 sections', function() {
+ expect(this.sections.length).to.equal(3);
});
it('should fix section to have 1 commit', function() {
- expect(this.sections.fix.$scope.length).to.equal(1);
+ expect(this.sections.find(findItem('type', 'fix')).components.find(findItem('name', '$scope')).commits.length).to.equal(1);
});
it('should feat section to have 1 commit', function() {
- expect(this.sections.feat.$scope.length).to.equal(1);
+ expect(this.sections.find(findItem('type', 'feat')).components.find(findItem('name', '$scope')).commits.length).to.equal(1);
});
it('should breaks section to be empty', function() {
- expect(this.sections.BREAKING).to.deep.equal({});
+ expect(this.sections.find(findItem('type', 'BREAKING'))).to.equal(undefined);
});
it('should style section to be empty', function() {
- expect(this.sections.style).to.deep.equal({});
+ expect(this.sections.find(findItem('type', 'style'))).to.equal(undefined);
});
it('should refactor section be empty', function() {
- expect(this.sections.refactor).to.deep.equal({});
+ expect(this.sections.find(findItem('type', 'refactor'))).to.equal(undefined);
});
it('should test section to be empty', function() {
- expect(this.sections.test).to.deep.equal({});
+ expect(this.sections.find(findItem('type', 'test'))).to.equal(undefined);
});
it('should chore section to have 1 commit', function() {
- expect(this.sections.chore.$scope.length).to.equal(3);
+ expect(this.sections.find(findItem('type', 'chore')).components.find(findItem('name', '$scope')).commits.length).to.equal(3);
});
it('should docs section to be empty', function() {
- expect(this.sections.docs).to.deep.equal({});
+ expect(this.sections.find(findItem('type', 'docs'))).to.equal(undefined);
});
});
@@ -665,16 +697,40 @@ describe('git_changelog_generate.js', function() {
before(function() {
changelog.setDefaults();
- this.sections = {
- fix: {},
- feat: {},
- BREAKING: {},
- style: {},
- refactor: {},
- test: {},
- chore: {},
- docs: {}
- };
+ this.sections = [
+ {
+ title: 'Bug Fixes',
+ grep: '^fix'
+ },
+ {
+ title: 'Features',
+ grep: '^feat'
+ },
+ {
+ title: 'Documentation',
+ grep: '^docs'
+ },
+ {
+ title: 'Breaking changes',
+ grep: 'BREAKING'
+ },
+ {
+ title: 'Refactor',
+ grep: '^refactor'
+ },
+ {
+ title: 'Style',
+ grep: '^style'
+ },
+ {
+ title: 'Test',
+ grep: '^test'
+ },
+ {
+ title: 'Chore',
+ grep: '^chore'
+ }
+ ];
var repo_url = 'https://github.com/owner/repo';
changelog.options.repo_url = repo_url;
changelog.getProviderLinks();
@@ -683,40 +739,25 @@ describe('git_changelog_generate.js', function() {
this.sections = changelog.organizeCommits(this.commits, this.sections);
});
- it('should return 8 sections', function() {
- expect(Object.keys(this.sections).length).to.equal(8);
+ it('should return 4 sections', function() {
+ expect(this.sections.length).to.equal(4);
});
it('should fix section to have 1 commit', function() {
- expect(this.sections.fix.$scope.length).to.equal(1);
+ expect(this.sections.find(findItem('type', 'fix')).components.find(findItem('name', '$scope')).commits.length).to.equal(1);
});
it('should feat section to have 1 commit', function() {
- expect(this.sections.feat.$scope.length).to.equal(1);
- });
-
- it('should breaks section to be empty', function() {
- expect(this.sections.BREAKING.$scope.length).to.equal(1);
+ expect(this.sections.find(findItem('type', 'feat')).components.find(findItem('name', '$scope')).commits.length).to.equal(1);
});
- it('should style section to be empty', function() {
- expect(this.sections.style).to.deep.equal({});
- });
-
- it('should refactor section be empty', function() {
- expect(this.sections.refactor).to.deep.equal({});
- });
-
- it('should test section to be empty', function() {
- expect(this.sections.test).to.deep.equal({});
+ it('should breaks have 1 component and 2 comits', function() {
+ expect(this.sections.find(findItem('type', 'BREAKING')).components.length).to.equals(1);
+ expect(this.sections.find(findItem('type', 'BREAKING')).components.find(findItem('name', '$scope')).commits.length).to.equal(1);
});
- it('should chore section to have 1 commit', function() {
- expect(this.sections.chore.$scope.length).to.equal(3);
- });
-
- it('should docs section to be empty', function() {
- expect(this.sections.docs).to.deep.equal({});
+ it('should chore section to have 3 commit', function() {
+ expect(this.sections.find(findItem('type', 'chore')).components.find(findItem('name', '$scope')).commits.length).to.equal(3);
});
});
@@ -878,7 +919,7 @@ describe('git_changelog_generate.js', function() {
})
.catch(function(err){
console.log('error', err);
- done();
+ done(err);
});
});
@@ -896,7 +937,7 @@ describe('git_changelog_generate.js', function() {
})
.catch(function(err){
console.log('error', err);
- done();
+ done(err);
});
});
@@ -914,7 +955,7 @@ describe('git_changelog_generate.js', function() {
})
.catch(function(err){
console.log('error', err);
- done();
+ done(err);
});
});
diff --git a/test/mocha.opts b/test/mocha.opts
index 727f2d7..3fbc269 100644
--- a/test/mocha.opts
+++ b/test/mocha.opts
@@ -1,3 +1,2 @@
---recursive
--reporter spec
--ui bdd