1 | 'use strict'
|
2 |
|
3 | const debug = require('debug')('elint:walker:stage')
|
4 | const fs = require('fs-extra')
|
5 | const minimatch = require('minimatch')
|
6 | const sgf = require('staged-git-files')
|
7 | const { getBaseDir } = require('../env')
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | function match (filename, patterns, ignorePatterns) {
|
19 | function isMatch (ps) {
|
20 | return ps.some(p => {
|
21 | return minimatch(filename, p, {
|
22 | dot: true
|
23 | })
|
24 | })
|
25 | }
|
26 |
|
27 | let isIgnore = false
|
28 |
|
29 | if (Array.isArray(ignorePatterns) && ignorePatterns.length) {
|
30 | isIgnore = isMatch(ignorePatterns)
|
31 | }
|
32 |
|
33 | if (isIgnore) {
|
34 | return false
|
35 | }
|
36 |
|
37 | return isMatch(patterns)
|
38 | }
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 | function stageFiles (patterns, ignorePatterns) {
|
49 | const baseDir = getBaseDir()
|
50 |
|
51 |
|
52 | if (!fs.existsSync(baseDir)) {
|
53 | return Promise.resolve([])
|
54 | }
|
55 |
|
56 | sgf.cwd = baseDir
|
57 |
|
58 | return new Promise(resolve => {
|
59 | sgf((err, result) => {
|
60 | if (err) {
|
61 | debug('staged-git-files error: %o', err)
|
62 | return resolve([])
|
63 | }
|
64 |
|
65 | const fileList = result
|
66 | .filter(item => item.status !== 'Deleted')
|
67 | .filter(item => match(item.filename, patterns, ignorePatterns))
|
68 | .map(item => item.filename)
|
69 |
|
70 | resolve(fileList)
|
71 | })
|
72 | })
|
73 | }
|
74 |
|
75 | module.exports = stageFiles
|