Skip to content

Commit f0942aa

Browse files
committed
Update: Replace inline CLI code with gulp-cli dependency
1 parent abd73b7 commit f0942aa

File tree

13 files changed

+4
-514
lines changed

13 files changed

+4
-514
lines changed

bin/gulp.js

Lines changed: 1 addition & 210 deletions
Original file line numberDiff line numberDiff line change
@@ -1,212 +1,3 @@
11
#!/usr/bin/env node
22

3-
'use strict';
4-
var gutil = require('gulp-util');
5-
var prettyTime = require('pretty-hrtime');
6-
var chalk = require('chalk');
7-
var semver = require('semver');
8-
var archy = require('archy');
9-
var Liftoff = require('liftoff');
10-
var tildify = require('tildify');
11-
var interpret = require('interpret');
12-
var v8flags = require('v8flags');
13-
var completion = require('../lib/completion');
14-
var argv = require('minimist')(process.argv.slice(2));
15-
var taskTree = require('../lib/taskTree');
16-
17-
// Set env var for ORIGINAL cwd
18-
// before anything touches it
19-
process.env.INIT_CWD = process.cwd();
20-
21-
var cli = new Liftoff({
22-
name: 'gulp',
23-
completions: completion,
24-
extensions: interpret.jsVariants,
25-
v8flags: v8flags,
26-
});
27-
28-
// Exit with 0 or 1
29-
var failed = false;
30-
process.once('exit', function(code) {
31-
if (code === 0 && failed) {
32-
process.exit(1);
33-
}
34-
});
35-
36-
// Parse those args m8
37-
var cliPackage = require('../package');
38-
var versionFlag = argv.v || argv.version;
39-
var tasksFlag = argv.T || argv.tasks;
40-
var tasks = argv._;
41-
var toRun = tasks.length ? tasks : ['default'];
42-
43-
// This is a hold-over until we have a better logging system
44-
// with log levels
45-
var simpleTasksFlag = argv['tasks-simple'];
46-
var shouldLog = !argv.silent && !simpleTasksFlag;
47-
48-
if (!shouldLog) {
49-
gutil.log = function() {};
50-
}
51-
52-
cli.on('require', function(name) {
53-
gutil.log('Requiring external module', chalk.magenta(name));
54-
});
55-
56-
cli.on('requireFail', function(name) {
57-
gutil.log(chalk.red('Failed to load external module'), chalk.magenta(name));
58-
});
59-
60-
cli.on('respawn', function(flags, child) {
61-
var nodeFlags = chalk.magenta(flags.join(', '));
62-
var pid = chalk.magenta(child.pid);
63-
gutil.log('Node flags detected:', nodeFlags);
64-
gutil.log('Respawned to PID:', pid);
65-
});
66-
67-
cli.launch({
68-
cwd: argv.cwd,
69-
configPath: argv.gulpfile,
70-
require: argv.require,
71-
completion: argv.completion,
72-
}, handleArguments);
73-
74-
// The actual logic
75-
function handleArguments(env) {
76-
if (versionFlag && tasks.length === 0) {
77-
gutil.log('CLI version', cliPackage.version);
78-
if (env.modulePackage && typeof env.modulePackage.version !== 'undefined') {
79-
gutil.log('Local version', env.modulePackage.version);
80-
}
81-
process.exit(0);
82-
}
83-
84-
if (!env.modulePath) {
85-
gutil.log(
86-
chalk.red('Local gulp not found in'),
87-
chalk.magenta(tildify(env.cwd))
88-
);
89-
gutil.log(chalk.red('Try running: npm install gulp'));
90-
process.exit(1);
91-
}
92-
93-
if (!env.configPath) {
94-
gutil.log(chalk.red('No gulpfile found'));
95-
process.exit(1);
96-
}
97-
98-
// Check for semver difference between cli and local installation
99-
if (semver.gt(cliPackage.version, env.modulePackage.version)) {
100-
gutil.log(chalk.red('Warning: gulp version mismatch:'));
101-
gutil.log(chalk.red('Global gulp is', cliPackage.version));
102-
gutil.log(chalk.red('Local gulp is', env.modulePackage.version));
103-
}
104-
105-
// Chdir before requiring gulpfile to make sure
106-
// we let them chdir as needed
107-
if (process.cwd() !== env.cwd) {
108-
process.chdir(env.cwd);
109-
gutil.log(
110-
'Working directory changed to',
111-
chalk.magenta(tildify(env.cwd))
112-
);
113-
}
114-
115-
// This is what actually loads up the gulpfile
116-
require(env.configPath);
117-
gutil.log('Using gulpfile', chalk.magenta(tildify(env.configPath)));
118-
119-
var gulpInst = require(env.modulePath);
120-
logEvents(gulpInst);
121-
122-
process.nextTick(function() {
123-
if (simpleTasksFlag) {
124-
return logTasksSimple(env, gulpInst);
125-
}
126-
if (tasksFlag) {
127-
return logTasks(env, gulpInst);
128-
}
129-
gulpInst.start.apply(gulpInst, toRun);
130-
});
131-
}
132-
133-
function logTasks(env, localGulp) {
134-
var tree = taskTree(localGulp.tasks);
135-
tree.label = 'Tasks for ' + chalk.magenta(tildify(env.configPath));
136-
archy(tree)
137-
.split('\n')
138-
.forEach(function(v) {
139-
if (v.trim().length === 0) {
140-
return;
141-
}
142-
gutil.log(v);
143-
});
144-
}
145-
146-
function logTasksSimple(env, localGulp) {
147-
console.log(Object.keys(localGulp.tasks)
148-
.join('\n')
149-
.trim());
150-
}
151-
152-
// Format orchestrator errors
153-
function formatError(e) {
154-
if (!e.err) {
155-
return e.message;
156-
}
157-
158-
// PluginError
159-
if (typeof e.err.showStack === 'boolean') {
160-
return e.err.toString();
161-
}
162-
163-
// Normal error
164-
if (e.err.stack) {
165-
return e.err.stack;
166-
}
167-
168-
// Unknown (string, number, etc.)
169-
return new Error(String(e.err)).stack;
170-
}
171-
172-
// Wire up logging events
173-
function logEvents(gulpInst) {
174-
175-
// Total hack due to poor error management in orchestrator
176-
gulpInst.on('err', function() {
177-
failed = true;
178-
});
179-
180-
gulpInst.on('task_start', function(e) {
181-
// TODO: batch these
182-
// so when 5 tasks start at once it only logs one time with all 5
183-
gutil.log('Starting', '\'' + chalk.cyan(e.task) + '\'...');
184-
});
185-
186-
gulpInst.on('task_stop', function(e) {
187-
var time = prettyTime(e.hrDuration);
188-
gutil.log(
189-
'Finished', '\'' + chalk.cyan(e.task) + '\'',
190-
'after', chalk.magenta(time)
191-
);
192-
});
193-
194-
gulpInst.on('task_err', function(e) {
195-
var msg = formatError(e);
196-
var time = prettyTime(e.hrDuration);
197-
gutil.log(
198-
'\'' + chalk.cyan(e.task) + '\'',
199-
chalk.red('errored after'),
200-
chalk.magenta(time)
201-
);
202-
gutil.log(msg);
203-
});
204-
205-
gulpInst.on('task_not_found', function(err) {
206-
gutil.log(
207-
chalk.red('Task \'' + err.task + '\' is not in your gulpfile')
208-
);
209-
gutil.log('Please check the documentation for proper gulpfile formatting');
210-
process.exit(1);
211-
});
212-
}
3+
require('gulp-cli')();

completion/README.md

Lines changed: 0 additions & 20 deletions
This file was deleted.

completion/bash

Lines changed: 0 additions & 27 deletions
This file was deleted.

completion/fish

Lines changed: 0 additions & 10 deletions
This file was deleted.

completion/powershell

Lines changed: 0 additions & 61 deletions
This file was deleted.

completion/zsh

Lines changed: 0 additions & 25 deletions
This file was deleted.

docs/CLI.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ gulp has very few flags to know about. All other flags are for tasks to use if n
1010
- `--cwd <dir path>` will manually set the CWD. The search for the gulpfile, as well as the relativity of all requires will be from here
1111
- `-T` or `--tasks` will display the task dependency tree for the loaded gulpfile
1212
- `--tasks-simple` will display a plaintext list of tasks for the loaded gulpfile
13-
- `--verify` will verify plugins referenced in project's package.json against the plugins black list
13+
- `--verify` will verify plugins referenced in project's package.json against the plugins blacklist
1414
- `--color` will force gulp and gulp plugins to display colors even when no color support is detected
1515
- `--no-color` will force gulp and gulp plugins to not display colors even when color support is detected
1616
- `--silent` will disable all gulp logging

0 commit comments

Comments
 (0)