Consolidate git file logic in lintStagedFiles task

We limit the amount of moving parts when it comes to parsing our staged
files in git by reusing the files_to_commit utility rather than the
now-defunct collectStagedFiles task.
This commit is contained in:
Court Ewing 2015-12-28 17:31:36 -05:00
parent acded081fa
commit 86d958ae97
4 changed files with 14 additions and 31 deletions

View file

@ -1,28 +0,0 @@
import { resolve } from 'path';
import SimpleGit from 'simple-git';
import { promisify } from 'bluebird';
const root = resolve(__dirname, '..');
const simpleGit = new SimpleGit(root);
const diff = promisify(simpleGit.diff, simpleGit);
export default function (grunt) {
grunt.registerTask('collectStagedFiles', function () {
diff(['--name-status', '--cached'])
.then(output => {
const files = output
.split('\n')
.map(line => line.trim().split('\t'))
.map(parts => {
const status = parts.shift();
if (status === 'D' || status === 'U') return;
return parts.join('\t').trim();
})
.filter(Boolean);
grunt.log.ok(files.length + ' staged files');
grunt.config.set('stagedFiles', files);
})
.nodeify(this.async());
});
};

View file

@ -1,17 +1,20 @@
import { resolve } from 'path';
import { isStaged, getFilename } from './utils/files_to_commit';
const root = resolve(__dirname, '..');
export default function (grunt) {
grunt.registerTask('lintStagedFiles', function () {
grunt.task.requires('collectStagedFiles');
grunt.task.requires('collectFilesToCommit');
// match these patterns
var patterns = grunt.config.get('eslint.source.files.src');
if (!patterns) grunt.fail.warn('eslint file pattern is not defined');
const files = grunt.config
.get('stagedFiles')
.get('filesToCommit')
.filter(isStaged)
.map(getFilename)
.map(file => resolve(root, file))
.filter(file => grunt.file.isMatch(patterns, file));

View file

@ -1,7 +1,6 @@
export default function (grunt) {
grunt.registerTask('precommit', [
'collectFilesToCommit',
'collectStagedFiles',
'checkAddedFilenames',
'lintStagedFiles'
]);

View file

@ -1,5 +1,6 @@
import SimpleGit from 'simple-git';
import { promisify } from 'bluebird';
import { includes } from 'lodash';
export default function filesToCommit(path) {
const simpleGit = new SimpleGit(path);
@ -30,3 +31,11 @@ export function isAdded(file) {
export function isDeleted(file) {
return file.status === 'D';
}
export function isUnmerged(file) {
return file.status === 'U';
}
export function isStaged(file) {
return !isDeleted(file) && !isUnmerged(file);
}