mirror of
https://github.com/shelljs/shelljs.git
synced 2025-12-08 20:35:51 +00:00
For a current makescript I was unable to use promises as the task had previously ran. This commit returns a result of the target so promises can still resolve but doesn't change the flow of how the make file works.
58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
require('./global');
|
|
|
|
global.config.fatal = true;
|
|
global.target = {};
|
|
|
|
var args = process.argv.slice(2),
|
|
targetArgs,
|
|
dashesLoc = args.indexOf('--');
|
|
|
|
// split args, everything after -- if only for targets
|
|
if (dashesLoc > -1) {
|
|
targetArgs = args.slice(dashesLoc + 1, args.length);
|
|
args = args.slice(0, dashesLoc);
|
|
}
|
|
|
|
// This ensures we only execute the script targets after the entire script has
|
|
// been evaluated
|
|
setTimeout(function() {
|
|
var t;
|
|
|
|
if (args.length === 1 && args[0] === '--help') {
|
|
console.log('Available targets:');
|
|
for (t in global.target)
|
|
console.log(' ' + t);
|
|
return;
|
|
}
|
|
|
|
// Wrap targets to prevent duplicate execution
|
|
for (t in global.target) {
|
|
(function(t, oldTarget){
|
|
|
|
// Wrap it
|
|
global.target[t] = function() {
|
|
if (!oldTarget.done){
|
|
oldTarget.done = true;
|
|
oldTarget.result = oldTarget.apply(oldTarget, arguments);
|
|
}
|
|
return oldTarget.result;
|
|
};
|
|
|
|
})(t, global.target[t]);
|
|
}
|
|
|
|
// Execute desired targets
|
|
if (args.length > 0) {
|
|
args.forEach(function(arg) {
|
|
if (arg in global.target)
|
|
global.target[arg](targetArgs);
|
|
else {
|
|
console.log('no such target: ' + arg);
|
|
}
|
|
});
|
|
} else if ('all' in global.target) {
|
|
global.target.all(targetArgs);
|
|
}
|
|
|
|
}, 0);
|