|
|
- 'use strict'
-
- var dateFormat = require('dateformat')
- var join = require('path').join
- var readFileSync = require('fs').readFileSync
- var semverValid = require('semver').valid
- var through = require('through2')
- var util = require('./lib/util')
- var _ = require('lodash')
-
- function conventionalChangelogWriter (context, options) {
- var savedKeyCommit
- var commits = []
- var firstRelease = true
- var neverGenerated = true
-
- context = _.extend({
- commit: 'commits',
- issue: 'issues',
- date: dateFormat(new Date(), 'yyyy-mm-dd', true)
- }, context)
-
- if (!_.isBoolean(context.linkReferences) && (context.repository || context.repoUrl) && context.commit && context.issue) {
- context.linkReferences = true
- }
-
- options = _.assign({
- groupBy: 'type',
- commitsSort: 'header',
- noteGroupsSort: 'title',
- notesSort: 'text',
- generateOn: function (commit) {
- return semverValid(commit.version)
- },
- finalizeContext: function (context) {
- return context
- },
- debug: function () {},
- reverse: false,
- includeDetails: false,
- ignoreReverted: true,
- doFlush: true,
- mainTemplate: readFileSync(join(__dirname, 'templates/template.hbs'), 'utf-8'),
- headerPartial: readFileSync(join(__dirname, 'templates/header.hbs'), 'utf-8'),
- commitPartial: readFileSync(join(__dirname, 'templates/commit.hbs'), 'utf-8'),
- footerPartial: readFileSync(join(__dirname, 'templates/footer.hbs'), 'utf-8')
- }, options)
-
- if ((!_.isFunction(options.transform) && _.isObject(options.transform)) || _.isUndefined(options.transform)) {
- options.transform = _.assign({
- hash: function (hash) {
- if (_.isString(hash)) {
- return hash.substring(0, 7)
- }
- },
- header: function (header) {
- return header.substring(0, 100)
- },
- committerDate: function (date) {
- if (!date) {
- return
- }
-
- return dateFormat(date, 'yyyy-mm-dd', true)
- }
- }, options.transform)
- }
-
- var generateOn = options.generateOn
- if (_.isString(generateOn)) {
- generateOn = function (commit) {
- return !_.isUndefined(commit[options.generateOn])
- }
- } else if (!_.isFunction(generateOn)) {
- generateOn = function () {
- return false
- }
- }
-
- options.commitGroupsSort = util.functionify(options.commitGroupsSort)
- options.commitsSort = util.functionify(options.commitsSort)
- options.noteGroupsSort = util.functionify(options.noteGroupsSort)
- options.notesSort = util.functionify(options.notesSort)
-
- return through.obj(function (chunk, enc, cb) {
- try {
- var result
- var commit = util.processCommit(chunk, options.transform, context)
- var keyCommit = commit || chunk
-
- // previous blocks of logs
- if (options.reverse) {
- if (commit) {
- commits.push(commit)
- }
-
- if (generateOn(keyCommit, commits, context, options)) {
- neverGenerated = false
- result = util.generate(options, commits, context, keyCommit)
- if (options.includeDetails) {
- this.push({
- log: result,
- keyCommit: keyCommit
- })
- } else {
- this.push(result)
- }
-
- commits = []
- }
- } else {
- if (generateOn(keyCommit, commits, context, options)) {
- neverGenerated = false
- result = util.generate(options, commits, context, savedKeyCommit)
-
- if (!firstRelease || options.doFlush) {
- if (options.includeDetails) {
- this.push({
- log: result,
- keyCommit: savedKeyCommit
- })
- } else {
- this.push(result)
- }
- }
-
- firstRelease = false
- commits = []
- savedKeyCommit = keyCommit
- }
-
- if (commit) {
- commits.push(commit)
- }
- }
-
- cb()
- } catch (err) {
- cb(err)
- }
- }, function (cb) {
- if (!options.doFlush && (options.reverse || neverGenerated)) {
- cb(null)
- return
- }
-
- try {
- var result = util.generate(options, commits, context, savedKeyCommit)
-
- if (options.includeDetails) {
- this.push({
- log: result,
- keyCommit: savedKeyCommit
- })
- } else {
- this.push(result)
- }
-
- cb()
- } catch (err) {
- cb(err)
- }
- })
- }
-
- module.exports = conventionalChangelogWriter
|