1 | require('shelljs/global')
|
2 | const fs = require('fs')
|
3 | const path = require('path')
|
4 | const sep = path.sep
|
5 | let exists = fs.existsSync || path.existsSync
|
6 | let pkgName = require('../package.json').name
|
7 |
|
8 |
|
9 | let hook = path.resolve(__dirname, 'hook')
|
10 | let root = exec('git rev-parse --show-toplevel').stdout.replace('\n', '')
|
11 | let git = path.resolve(root, '.git')
|
12 | let hooks = path.resolve(git, 'hooks')
|
13 |
|
14 | let tasks = ['pre-commit', 'commit-msg']
|
15 |
|
16 | if (!exists(git) || !fs.lstatSync(git).isDirectory()) {
|
17 | console.log('请先安装git,再执行 `npm run git-install` 命令安装git钩子')
|
18 | process.exit(0)
|
19 | }
|
20 |
|
21 | if (!exists(hooks)) {
|
22 | console.log('未找到.git/hooks文件夹,帮您创建')
|
23 | fs.mkdirSync(hooks)
|
24 | }
|
25 |
|
26 | tasks.forEach(value => {
|
27 | let task = path.resolve(hooks, value)
|
28 | let hookFile = fs.readFileSync(hook).toString()
|
29 | hookFile = hookFile.replace('$NODEJS', process.execPath)
|
30 | hookFile = hookFile.replace('$NODEJSPATH', path.resolve(process.execPath, '../'))
|
31 | hookFile = hookFile.replace('$TASK', `${pkgName}${sep}gitHooks${sep}script${sep}${value}.js`)
|
32 | fs.writeFileSync(task, hookFile)
|
33 |
|
34 | fs.chmodSync(task, '777')
|
35 | console.log(`${task} installed success !`)
|
36 | })
|