UNPKG

1.16 kBJavaScriptView Raw
1const { execSync } = require('child_process')
2const fs = require('fs-extra')
3const path = require('path')
4
5const { resolveCwd } = require('./utils')
6
7const TEXT_FILE_EXT = [
8 '.js', '.json', '.css', '.scss', '.sass', '.html',
9 '.log', '.xml', '.vue'
10]
11const textFileTypes = new Set(TEXT_FILE_EXT)
12const isTextFile = function (type) {
13 return textFileTypes.has(type)
14}
15
16module.exports = (target, empty, src) => {
17 const srcStats = fs.lstatSync(src)
18 const srcExt = path.extname(src)
19
20 if (isTextFile(srcExt) || !srcExt || srcStats.isDirectory()) {
21 if (fs.existsSync(target) && !srcStats.isDirectory()) {
22 try {
23 const child = execSync(`git merge-file ${target} ${empty} ${src}`)
24 } catch (err) {
25 const rst = fs.readFileSync(target, { encoding: 'utf-8' })
26 const conflictRE = /\>{6,}/
27 const hasConflict = conflictRE.test(rst)
28
29 if (hasConflict) return false
30 else throw err
31 }
32 } else {
33 fs.copySync(src, target)
34 }
35 } else {
36 fs.copySync(src, target)
37 }
38
39 return true
40}
41
42