Git hook written on JavaScript

As in many teams, me and my coworkers are putting ticket number into beginning of each commit message. If your branches are starting with ticket number it is easy to create prepare-commit-msg hook to automate this action, and since I'm a front-end deveoper, I decided to write it as a nodejs script. Look at what I came up with and tell me how to make it better if you will.

#.git/hooks/prepare-commit-msg

#!/usr/bin/env node

const fs = require('fs')
const { exec } = require('child_process')

const COMMIT_EDITMSG = process.argv[2]

exec('git symbolic-ref --short HEAD', (err, stdout) => {
if (err) throw err

COMMIT_EDITMSG,
'utf8',
(err, message) => {
if (err) throw err

fs.writeFile(
COMMIT_EDITMSG,
${stdout.replace(/(-|_).*/, '')}${message}.replace(/\n/, ''),
err => {
if (err) throw err
}
)
}
)
})

• You most definitely want to be using return console.error(...) in all those error scenarios :) Jun 28 '18 at 0:09
• Would you advise to throw an error instead of loging it trough console.error? Jun 28 '18 at 9:19
• even better! Point is, something bad has happened that shouldn't have, you don't want to let the hook continue, with your current code it would. Jun 28 '18 at 9:46

Outwith the improved error handling as per the comments, another improvement on this be to write the hook using a more synchronous approach e.g.

#.git/hooks/prepare-commit-msg
#!/usr/bin/env node

const { readFileSync, writeFileSync } = require('fs')
const { execSync } = require('child_process')
const COMMIT_EDITMSG = process.argv[2];

const stdout = execSync('git symbolic-ref --short HEAD');
writeFileSync(COMMIT_EDITMSG, ${stdout.replace(/(-|_).*/, '')}${message}.replace(/\n/, ''));