提交 a14d8e21 编写于 作者: J Joao Moreno

refactor gulp.hygiene for a pre-commit hook

related to #636
上级 b2a6b8d8
...@@ -8,12 +8,16 @@ var filter = require('gulp-filter'); ...@@ -8,12 +8,16 @@ var filter = require('gulp-filter');
var es = require('event-stream'); var es = require('event-stream');
var path = require('path'); var path = require('path');
var eolFilter = [ var all = [
'build/**/*', 'build/**/*',
'extensions/**/*', 'extensions/**/*',
'scripts/**/*', 'scripts/**/*',
'src/**/*', 'src/**/*',
'test/**/*', 'test/**/*'
];
var eolFilter = [
'**',
'!extensions/csharp-o/bin/**', '!extensions/csharp-o/bin/**',
'!extensions/**/out/**', '!extensions/**/out/**',
'!**/node_modules/**', '!**/node_modules/**',
...@@ -64,12 +68,12 @@ var copyrightHeader = [ ...@@ -64,12 +68,12 @@ var copyrightHeader = [
' *--------------------------------------------------------------------------------------------*/' ' *--------------------------------------------------------------------------------------------*/'
].join('\n'); ].join('\n');
gulp.task('hygiene', function() { var hygiene = exports.hygiene = function (some) {
var errorCount = 0; var errorCount = 0;
var eol = es.through(function (file) { var eol = es.through(function (file) {
if (/\r\n?/g.test(file.contents.toString('utf8'))) { if (/\r\n?/g.test(file.contents.toString('utf8'))) {
console.error(file.path + ': Bad EOL found'); console.error(file.relative + ': Bad EOL found');
errorCount++; errorCount++;
} }
...@@ -88,7 +92,7 @@ gulp.task('hygiene', function() { ...@@ -88,7 +92,7 @@ gulp.task('hygiene', function() {
} else if (/^[\t]* \*/.test(line)) { } else if (/^[\t]* \*/.test(line)) {
// block comment using an extra space // block comment using an extra space
} else { } else {
console.error(file.path + '(' + (i + 1) + ',1): Bad whitespace indentation'); console.error(file.relative + '(' + (i + 1) + ',1): Bad whitespace indentation');
errorCount++; errorCount++;
} }
}); });
...@@ -98,15 +102,16 @@ gulp.task('hygiene', function() { ...@@ -98,15 +102,16 @@ gulp.task('hygiene', function() {
var copyrights = es.through(function (file) { var copyrights = es.through(function (file) {
if (file.contents.toString('utf8').indexOf(copyrightHeader) !== 0) { if (file.contents.toString('utf8').indexOf(copyrightHeader) !== 0) {
console.error(file.path + ': Missing or bad copyright statement'); console.error(file.relative + ': Missing or bad copyright statement');
errorCount++; errorCount++;
} }
this.emit('data', file); this.emit('data', file);
}); });
return gulp.src(eolFilter, { base: '.' }) return gulp.src(some || all, { base: '.' })
.pipe(filter(function (f) { return !f.stat.isDirectory(); })) .pipe(filter(function (f) { return !f.stat.isDirectory(); }))
.pipe(filter(eolFilter))
.pipe(eol) .pipe(eol)
.pipe(filter(indentationFilter)) .pipe(filter(indentationFilter))
.pipe(indentation) .pipe(indentation)
...@@ -119,4 +124,28 @@ gulp.task('hygiene', function() { ...@@ -119,4 +124,28 @@ gulp.task('hygiene', function() {
this.emit('end'); this.emit('end');
} }
})); }));
};
gulp.task('hygiene', function () {
return hygiene();
}); });
// this allows us to run this as a git pre-commit hook
if (require.main === module) {
var cp = require('child_process');
cp.exec('git diff --cached --name-only', function (err, out) {
if (err) {
console.log(err);
process.exit(1);
}
var some = out
.split(/\r?\n/)
.filter(function (l) { return !!l; });
hygiene(some).on('error', function (err) {
console.log(err);
process.exit(1);
});
});
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册