85 lines
2.1 KiB
JavaScript
85 lines
2.1 KiB
JavaScript
|
/*
|
||
|
* grunt
|
||
|
* http://gruntjs.com/
|
||
|
*
|
||
|
* Copyright (c) 2013 "Cowboy" Ben Alman
|
||
|
* Licensed under the MIT license.
|
||
|
* https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
var grunt = require('../grunt');
|
||
|
|
||
|
// The module to be exported.
|
||
|
var fail = module.exports = {};
|
||
|
|
||
|
// Error codes.
|
||
|
fail.code = {
|
||
|
FATAL_ERROR: 1,
|
||
|
MISSING_GRUNTFILE: 2,
|
||
|
TASK_FAILURE: 3,
|
||
|
TEMPLATE_ERROR: 4,
|
||
|
INVALID_AUTOCOMPLETE: 5,
|
||
|
WARNING: 6,
|
||
|
};
|
||
|
|
||
|
// DRY it up!
|
||
|
function writeln(e, mode) {
|
||
|
grunt.log.muted = false;
|
||
|
var msg = String(e.message || e);
|
||
|
if (!grunt.option('no-color')) { msg += '\x07'; } // Beep!
|
||
|
if (mode === 'warn') {
|
||
|
msg = 'Warning: ' + msg + ' ';
|
||
|
msg += (grunt.option('force') ? 'Used --force, continuing.'.underline : 'Use --force to continue.');
|
||
|
msg = msg.yellow;
|
||
|
} else {
|
||
|
msg = ('Fatal error: ' + msg).red;
|
||
|
}
|
||
|
grunt.log.writeln(msg);
|
||
|
}
|
||
|
|
||
|
// If --stack is enabled, log the appropriate error stack (if it exists).
|
||
|
function dumpStack(e) {
|
||
|
if (grunt.option('stack')) {
|
||
|
if (e.origError && e.origError.stack) {
|
||
|
console.log(e.origError.stack);
|
||
|
} else if (e.stack) {
|
||
|
console.log(e.stack);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// A fatal error occurred. Abort immediately.
|
||
|
fail.fatal = function(e, errcode) {
|
||
|
writeln(e, 'fatal');
|
||
|
dumpStack(e);
|
||
|
grunt.util.exit(typeof errcode === 'number' ? errcode : fail.code.FATAL_ERROR);
|
||
|
};
|
||
|
|
||
|
// Keep track of error and warning counts.
|
||
|
fail.errorcount = 0;
|
||
|
fail.warncount = 0;
|
||
|
|
||
|
// A warning occurred. Abort immediately unless -f or --force was used.
|
||
|
fail.warn = function(e, errcode) {
|
||
|
var message = typeof e === 'string' ? e : e.message;
|
||
|
fail.warncount++;
|
||
|
writeln(message, 'warn');
|
||
|
// If -f or --force aren't used, stop script processing.
|
||
|
if (!grunt.option('force')) {
|
||
|
dumpStack(e);
|
||
|
grunt.log.writeln().fail('Aborted due to warnings.');
|
||
|
grunt.util.exit(typeof errcode === 'number' ? errcode : fail.code.WARNING);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// This gets called at the very end.
|
||
|
fail.report = function() {
|
||
|
if (fail.warncount > 0) {
|
||
|
grunt.log.writeln().fail('Done, but with warnings.');
|
||
|
} else {
|
||
|
grunt.log.writeln().success('Done, without errors.');
|
||
|
}
|
||
|
};
|