1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = void 0;
|
7 |
|
8 | var _scms = _interopRequireDefault(require("./scms"));
|
9 |
|
10 | var _processFiles = _interopRequireDefault(require("./processFiles"));
|
11 |
|
12 | var _createIgnorer = _interopRequireDefault(require("./createIgnorer"));
|
13 |
|
14 | var _createMatcher = _interopRequireDefault(require("./createMatcher"));
|
15 |
|
16 | var _isSupportedExtension = _interopRequireDefault(require("./isSupportedExtension"));
|
17 |
|
18 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
19 |
|
20 | var _default = (currentDirectory, {
|
21 | config,
|
22 | since,
|
23 | staged,
|
24 | pattern,
|
25 | restage = true,
|
26 | branch,
|
27 | bail,
|
28 | check,
|
29 | verbose,
|
30 | onFoundSinceRevision,
|
31 | onFoundChangedFiles,
|
32 | onPartiallyStagedFile,
|
33 | onExamineFile,
|
34 | onCheckFile,
|
35 | onWriteFile
|
36 | } = {}) => {
|
37 | const scm = (0, _scms.default)(currentDirectory);
|
38 |
|
39 | if (!scm) {
|
40 | throw new Error('Unable to detect a source control manager.');
|
41 | }
|
42 |
|
43 | const directory = scm.rootDirectory;
|
44 | const revision = since || scm.getSinceRevision(directory, {
|
45 | staged,
|
46 | branch
|
47 | });
|
48 | onFoundSinceRevision && onFoundSinceRevision(scm.name, revision);
|
49 | const rootIgnorer = (0, _createIgnorer.default)(directory);
|
50 | const cwdIgnorer = currentDirectory !== directory ? (0, _createIgnorer.default)(currentDirectory) : () => true;
|
51 | const changedFiles = scm.getChangedFiles(directory, revision, staged).filter(_isSupportedExtension.default).filter((0, _createMatcher.default)(pattern)).filter(rootIgnorer).filter(cwdIgnorer);
|
52 | const unstagedFiles = staged ? scm.getUnstagedChangedFiles(directory, revision).filter(_isSupportedExtension.default).filter((0, _createMatcher.default)(pattern)).filter(rootIgnorer).filter(cwdIgnorer) : [];
|
53 |
|
54 | const wasFullyStaged = f => unstagedFiles.indexOf(f) < 0;
|
55 |
|
56 | onFoundChangedFiles && onFoundChangedFiles(changedFiles);
|
57 | const failReasons = new Set();
|
58 | (0, _processFiles.default)(directory, changedFiles, {
|
59 | check,
|
60 | config,
|
61 | onWriteFile: file => {
|
62 | onWriteFile && onWriteFile(file);
|
63 |
|
64 | if (bail) {
|
65 | failReasons.add('BAIL_ON_WRITE');
|
66 | }
|
67 |
|
68 | if (staged && restage) {
|
69 | if (wasFullyStaged(file)) {
|
70 | scm.stageFile(directory, file);
|
71 | } else {
|
72 | onPartiallyStagedFile && onPartiallyStagedFile(file);
|
73 | failReasons.add('PARTIALLY_STAGED_FILE');
|
74 | }
|
75 | }
|
76 | },
|
77 | onCheckFile: (file, isFormatted) => {
|
78 | onCheckFile && onCheckFile(file, isFormatted);
|
79 |
|
80 | if (!isFormatted) {
|
81 | failReasons.add('CHECK_FAILED');
|
82 | }
|
83 | },
|
84 | onExamineFile: verbose && onExamineFile
|
85 | });
|
86 | return {
|
87 | success: failReasons.size === 0,
|
88 | errors: Array.from(failReasons)
|
89 | };
|
90 | };
|
91 |
|
92 | exports.default = _default; |
\ | No newline at end of file |