| 57 | }; |
| 58 | |
| 59 | var run = function(cmdString, action, logger, config) { |
| 60 | logger.action(action, cmdString); |
| 61 | |
| 62 | //pass env + BOWER_PID so callees can identify a preinstall+postinstall from the same bower instance |
| 63 | var env = mout.object.mixIn({ BOWER_PID: process.pid }, process.env); |
| 64 | var args = shellquote.parse(cmdString, env); |
| 65 | var cmdName = args[0]; |
| 66 | mout.array.remove(args, cmdName); //no rest() in mout |
| 67 | |
| 68 | var options = { |
| 69 | cwd: config.cwd, |
| 70 | env: env |
| 71 | }; |
| 72 | |
| 73 | var promise = cmd(cmdName, args, options); |
| 74 | |
| 75 | promise.progress(function(progress) { |
| 76 | progress.split('\n').forEach(function(line) { |
| 77 | if (line) { |
| 78 | logger.action(action, line); |
| 79 | } |
| 80 | }); |
| 81 | }); |
| 82 | |
| 83 | return promise; |
| 84 | }; |
| 85 | |
| 86 | var hook = function( |
| 87 | action, |