94 lines
2.8 KiB
JavaScript
94 lines
2.8 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _scms = _interopRequireDefault(require("./scms"));
|
|
|
|
var _processFiles = _interopRequireDefault(require("./processFiles"));
|
|
|
|
var _createIgnorer = _interopRequireDefault(require("./createIgnorer"));
|
|
|
|
var _createMatcher = _interopRequireDefault(require("./createMatcher"));
|
|
|
|
var _isSupportedExtension = _interopRequireDefault(require("./isSupportedExtension"));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
var _default = (currentDirectory, {
|
|
config,
|
|
since,
|
|
staged,
|
|
pattern,
|
|
restage = true,
|
|
branch,
|
|
bail,
|
|
check,
|
|
ignorePath,
|
|
verbose,
|
|
onFoundSinceRevision,
|
|
onFoundChangedFiles,
|
|
onPartiallyStagedFile,
|
|
onExamineFile,
|
|
onCheckFile,
|
|
onWriteFile,
|
|
resolveConfig = true
|
|
} = {}) => {
|
|
const scm = (0, _scms.default)(currentDirectory);
|
|
|
|
if (!scm) {
|
|
throw new Error('Unable to detect a source control manager.');
|
|
}
|
|
|
|
const directory = scm.rootDirectory;
|
|
const revision = since || scm.getSinceRevision(directory, {
|
|
staged,
|
|
branch
|
|
});
|
|
onFoundSinceRevision && onFoundSinceRevision(scm.name, revision);
|
|
const rootIgnorer = (0, _createIgnorer.default)(directory, ignorePath);
|
|
const cwdIgnorer = currentDirectory !== directory ? (0, _createIgnorer.default)(currentDirectory, ignorePath) : () => true;
|
|
const changedFiles = scm.getChangedFiles(directory, revision, staged).filter((0, _isSupportedExtension.default)(resolveConfig)).filter((0, _createMatcher.default)(pattern)).filter(rootIgnorer).filter(cwdIgnorer);
|
|
const unstagedFiles = staged ? scm.getUnstagedChangedFiles(directory, revision).filter(_isSupportedExtension.default).filter((0, _createMatcher.default)(pattern)).filter(rootIgnorer).filter(cwdIgnorer) : [];
|
|
|
|
const wasFullyStaged = f => unstagedFiles.indexOf(f) < 0;
|
|
|
|
onFoundChangedFiles && onFoundChangedFiles(changedFiles);
|
|
const failReasons = new Set();
|
|
(0, _processFiles.default)(directory, changedFiles, {
|
|
check,
|
|
config,
|
|
onWriteFile: file => {
|
|
onWriteFile && onWriteFile(file);
|
|
|
|
if (bail) {
|
|
failReasons.add('BAIL_ON_WRITE');
|
|
}
|
|
|
|
if (staged && restage) {
|
|
if (wasFullyStaged(file)) {
|
|
scm.stageFile(directory, file);
|
|
} else {
|
|
onPartiallyStagedFile && onPartiallyStagedFile(file);
|
|
failReasons.add('PARTIALLY_STAGED_FILE');
|
|
}
|
|
}
|
|
},
|
|
onCheckFile: (file, isFormatted) => {
|
|
onCheckFile && onCheckFile(file, isFormatted);
|
|
|
|
if (!isFormatted) {
|
|
failReasons.add('CHECK_FAILED');
|
|
}
|
|
},
|
|
onExamineFile: verbose && onExamineFile
|
|
});
|
|
return {
|
|
success: failReasons.size === 0,
|
|
errors: Array.from(failReasons)
|
|
};
|
|
};
|
|
|
|
exports.default = _default; |