1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | var nopt = require('nopt'),
|
7 | Report = require('../report'),
|
8 | Reporter = require('../reporter'),
|
9 | path = require('path'),
|
10 | fs = require('fs'),
|
11 | Collector = require('../collector'),
|
12 | helpFormatter = require('../util/help-formatter'),
|
13 | formatOption = helpFormatter.formatOption,
|
14 | formatPara = helpFormatter.formatPara,
|
15 | filesFor = require('../util/file-matcher').filesFor,
|
16 | util = require('util'),
|
17 | Command = require('./index'),
|
18 | configuration = require('../config');
|
19 |
|
20 | function ReportCommand() {
|
21 | Command.call(this);
|
22 | }
|
23 |
|
24 | ReportCommand.TYPE = 'report';
|
25 | util.inherits(ReportCommand, Command);
|
26 |
|
27 | function printDeprecationMessage(pat, fmt) {
|
28 | console.error('**********************************************************************');
|
29 | console.error('DEPRECATION WARNING! You are probably using the old format of the report command');
|
30 | console.error('This will stop working soon, see `istanbul help report` for the new command format');
|
31 | console.error('Assuming you meant: istanbul report --include=' + pat + ' ' + fmt);
|
32 | console.error('**********************************************************************');
|
33 | }
|
34 |
|
35 | Command.mix(ReportCommand, {
|
36 | synopsis: function () {
|
37 | return "writes reports for coverage JSON objects produced in a previous run";
|
38 | },
|
39 |
|
40 | usage: function () {
|
41 | console.error('\nUsage: ' + this.toolName() + ' ' + this.type() + ' <options> [ <format> ... ]\n\nOptions are:\n\n' +
|
42 | [
|
43 | formatOption('--config <path-to-config>', 'the configuration file to use, defaults to .istanbul.yml'),
|
44 | formatOption('--root <input-directory>', 'The input root directory for finding coverage files'),
|
45 | formatOption('--dir <report-directory>', 'The output directory where files will be written. This defaults to ./coverage/'),
|
46 | formatOption('--include <glob>', 'The glob pattern to select one or more coverage files, defaults to **/coverage*.json'),
|
47 | formatOption('--verbose, -v', 'verbose mode')
|
48 | ].join('\n\n'));
|
49 |
|
50 | console.error('\n');
|
51 | console.error('<format> is one of ');
|
52 | Report.getReportList().forEach(function (name) {
|
53 | console.error(formatOption(name, Report.create(name).synopsis()));
|
54 | });
|
55 | console.error("");
|
56 | console.error(formatPara([
|
57 | 'Default format is lcov unless otherwise specified in the config file.',
|
58 | 'In addition you can tweak the file names for various reports using the config file.',
|
59 | 'Type `istanbul help config` to see what can be tweaked.'
|
60 | ].join(' ')));
|
61 | console.error('\n');
|
62 | },
|
63 |
|
64 | run: function (args, callback) {
|
65 |
|
66 | var template = {
|
67 | config: path,
|
68 | root: path,
|
69 | dir: path,
|
70 | include: String,
|
71 | verbose: Boolean
|
72 | },
|
73 | opts = nopt(template, { v : '--verbose' }, args, 0),
|
74 | includePattern = opts.include || '**/coverage*.json',
|
75 | root,
|
76 | collector = new Collector(),
|
77 | config = configuration.loadFile(opts.config, {
|
78 | verbose: opts.verbose,
|
79 | reporting: {
|
80 | dir: opts.dir
|
81 | }
|
82 | }),
|
83 | formats = opts.argv.remain,
|
84 | reporter = new Reporter(config);
|
85 |
|
86 |
|
87 | if (formats.length === 2 &&
|
88 | Report.getReportList().indexOf(formats[1]) < 0) {
|
89 | includePattern = formats[1];
|
90 | formats = [ formats[0] ];
|
91 | printDeprecationMessage(includePattern, formats[0]);
|
92 | }
|
93 |
|
94 |
|
95 | if (formats.length === 0) {
|
96 | formats = config.reporting.reports();
|
97 | }
|
98 | if (formats.length === 0) {
|
99 | formats = [ 'lcov' ];
|
100 | }
|
101 | reporter.addAll(formats);
|
102 |
|
103 | root = opts.root || process.cwd();
|
104 | filesFor({
|
105 | root: root,
|
106 | includes: [ includePattern ]
|
107 | }, function (err, files) {
|
108 | if (err) { throw err; }
|
109 | files.forEach(function (file) {
|
110 | var coverageObject = JSON.parse(fs.readFileSync(file, 'utf8'));
|
111 | collector.add(coverageObject);
|
112 | });
|
113 | reporter.write(collector, false, function (err) {
|
114 | console.log('Done');
|
115 | return callback(err);
|
116 | });
|
117 | });
|
118 | }
|
119 | });
|
120 |
|
121 | module.exports = ReportCommand;
|
122 |
|
123 |
|