Simple email application for Android. Original source code: https://framagit.org/dystopia-project/simple-email
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

166 lines
4.3 KiB

'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