UNPKG

git-last-commit

Version:

Read details of the last commit including tags

75 lines (61 loc) 1.64 kB
const process = require('child_process'), splitCharacter = '<##>' const executeCommand = (command, options, callback) => { let dst = __dirname if(!!options && options.dst) { dst = options.dst } process.exec(command, {cwd: dst}, function(err, stdout, stderr) { if (stdout === '') { callback('this does not look like a git repo') return } if (stderr) { callback(stderr) return } callback(null, stdout) }) } const prettyFormat = ["%h", "%H", "%s", "%f", "%b", "%at", "%ct", "%an", "%ae", "%cn", "%ce", "%N", ""] const getCommandString = splitCharacter => 'git log -1 --pretty=format:"' + prettyFormat.join(splitCharacter) +'"' + ' && git rev-parse --abbrev-ref HEAD' + ' && git tag --contains HEAD' const getLastCommit = (callback, options) => { const command = getCommandString(splitCharacter) executeCommand(command, options, function(err, res) { if (err) { callback(err) return } var a = res.split(splitCharacter) // e.g. master\n or master\nv1.1\n or master\nv1.1\nv1.2\n var branchAndTags = a[a.length-1].split('\n').filter(n => n) var branch = branchAndTags[0] var tags = branchAndTags.slice(1) callback(null, { shortHash: a[0], hash: a[1], subject: a[2], sanitizedSubject: a[3], body: a[4], authoredOn: a[5], committedOn: a[6], author: { name: a[7], email: a[8], }, committer: { name: a[9], email: a[10] }, notes: a[11], branch, tags }) }) } module.exports = { getLastCommit }