1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| 'use strict';
|
| const arrify = require('arrify');
| const git = require('simple-git/promise');
| const matcher = require('matcher');
|
| const getFiles = cwd => {
| return git(cwd)
| .silent(true)
| .status()
| .then(({ files }) => files);
| };
|
| const isMatch = (obj, patterns) => {
| return Object.keys(obj).every(key => {
| if (patterns[key].toString() === '*') {
| return true;
| }
|
| return matcher(Array.of(obj[key]), patterns[key]).length >= 1;
| });
| };
|
| module.exports = ({
| cwd = process.cwd(),
| path = '*',
| index = '*',
| workingTree = '*',
| } = {}) => {
| const patterns = {
| path: arrify(path),
| index: Array.from(index),
| workingTree: Array.from(workingTree),
| };
|
| return getFiles(cwd)
| .then(files => {
| return files.map(({ path, index, working_dir: workingTree }) => ({
| path,
| index,
| workingTree,
| }));
| })
| .then(files => files.filter(x => isMatch(x, patterns)));
| };
|
|