1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- // grunt-exec
- // ==========
- // * GitHub: https://github.com/jharding/grunt-exec
- // * Copyright (c) 2012 Jake Harding
- // * Licensed under the MIT license.
- module.exports = function(grunt) {
- var cp = require('child_process')
- , f = require('util').format
- , util = grunt.util
- , log = grunt.log
- , verbose = grunt.verbose;
- grunt.registerMultiTask('exec', 'Execute shell commands.', function() {
- var data = this.data
- , o = {
- stdout: data.stdout !== undefined ? data.stdout : true
- , stderr: data.stderr !== undefined ? data.stderr : true
- }
- , command
- , childProcess
- , args = [].slice.call(arguments, 0)
- , done = this.async();
- // allow for command to be specified in either
- // 'command' or 'cmd' property
- command = data.command || data.cmd;
- if (!command) {
- log.error('Missing command property.');
- return done(false);
- }
- if (util._.isFunction(command)) {
- command = command.apply(grunt, args);
- }
- if (!util._.isString(command)) {
- log.error('Command property must be a string.');
- return done(false);
- }
- verbose.subhead(command);
- childProcess = cp.exec(command);
- o.stdout && childProcess.stdout.on('data', function (d) { log.write(d); });
- o.stderr && childProcess.stderr.on('data', function (d) { log.error(d); });
- childProcess.on('exit', function(code) {
- if (code > 0) {
- log.error(f('Exited with code: %d.', code));
- return done(false);
- }
- verbose.ok(f('Exited with code: %d.', code));
- done();
- });
- });
- };
|