1 | require('lazy-ass');
|
2 | var check = require('check-more-types');
|
3 |
|
4 | var log = console.log.bind(console);
|
5 | var chalk = require('chalk');
|
6 | var pkg = require('../package.json');
|
7 | var utils = require('./utils');
|
8 | var _ = require('lodash');
|
9 |
|
10 | function Report(options) {
|
11 |
|
12 | la(check.object(options), 'missing options');
|
13 |
|
14 | this.options = options;
|
15 | this.ids = [];
|
16 | this.comments = [];
|
17 | this.allTags = [];
|
18 | }
|
19 |
|
20 | Report.prototype.tagForCommit = function tagForCommit(sha) {
|
21 | var report = this;
|
22 | return _.find(report.allTags, 'sha', sha);
|
23 | };
|
24 |
|
25 | Report.prototype.print = function print(opts) {
|
26 | opts = opts || {};
|
27 | var report = this;
|
28 | log('Changelog for module', chalk.underline(report.options.name),
|
29 | 'repo', chalk.underline(report.options.user + '/' + report.options.repo),
|
30 | 'from', report.options.from, 'to', report.options.to);
|
31 |
|
32 | la(report.ids.length === report.comments.length,
|
33 | 'mismatch in ids vs comments', report);
|
34 |
|
35 | report.ids.forEach(function (id, k) {
|
36 | var comment = report.comments[k] || '';
|
37 | if (!opts.details) {
|
38 | comment = utils.firstLine(comment);
|
39 | }
|
40 |
|
41 | var ownsTag = report.tagForCommit(id);
|
42 | if (ownsTag) {
|
43 | log('\n' + chalk.bold.underline(ownsTag.name));
|
44 | }
|
45 |
|
46 | log(' ' + chalk.bold(utils.shortenSha(id)) + ': ' + comment);
|
47 | });
|
48 |
|
49 | log('\nReport generated by %s %s', pkg.name, pkg.homepage);
|
50 | };
|
51 |
|
52 | module.exports = Report;
|
53 |
|
54 | if (!module.parent) {
|
55 | (function sampleReport() {
|
56 | var report = new Report({
|
57 | user: 'bahmutov',
|
58 | repo: 'next-update',
|
59 | name: 'next-update',
|
60 | from: '0.8.0',
|
61 | to: '0.8.3'
|
62 | });
|
63 | report.ids = [
|
64 | '89d437c4fe1178f120511ef43d6f6440956ba559',
|
65 | '2845b1bd6a8d32c38666ae98e40a16288711d56e',
|
66 | '3d2b1fa3523c0be35ecfb30d4c81407fd4ce30a6',
|
67 | 'a4eb79977600fc5d001617449a1874168b38d6c3'
|
68 | ];
|
69 | report.comments = [
|
70 | 'Printing allowed type, fixes #59',
|
71 | 'filtering modules by type',
|
72 | 'Added CLI option --type to only check modules like prod,dev or peer. fixes #56',
|
73 | 'bump'
|
74 | ];
|
75 | report.allTags = [
|
76 | { name: '0.0.12', sha: 'a343f9062999ae11418b2e1ee86d5f1776873a50' },
|
77 | { name: '0.0.11', sha: '8b3141eeec82ab1c9bb1d0afd2814ab90736f295' },
|
78 | { name: '0.0.10', sha: '839242c49ee1a4ede708937e8674f82c289a6860' },
|
79 | { name: '0.0.9', sha: '53056481cca85bb94bc8e0c242d2ed8990062ed5' },
|
80 | { name: '0.0.8', sha: 'a2cdf4406d0b5f412f4f68149671888c148d2dd2' },
|
81 | { name: '0.0.7', sha: 'd87671041bb1010f842b7defc931210416b82ac2' },
|
82 | { name: '0.0.6', sha: 'fede159c507d160ba548593097fa32cc2320f327' },
|
83 | { name: '0.0.5', sha: '37d7d76ec3bcef6562ff7083c6c052d98f1435e3' },
|
84 | { name: '0.0.4', sha: 'ebbd287cb3fb611430d8f2e6fcc299361d0ede5f' },
|
85 | { name: '0.0.3', sha: '2c21af22ef1deda357834875504fdb3dff9245e2' },
|
86 | { name: 'delete', sha: 'd5b122c1194703e8cea06630e7a008dd26b1c122' },
|
87 | { name: '0.8.3', sha: '89d437c4fe1178f120511ef43d6f6440956ba559' },
|
88 | { name: '0.8.2', sha: '3d2b1fa3523c0be35ecfb30d4c81407fd4ce30a6' },
|
89 | { name: '0.8.1', sha: 'a4eb79977600fc5d001617449a1874168b38d6c3' },
|
90 | { name: '0.8.0', sha: '627250039b89fba678f57f428ee9151c370d4dad' },
|
91 | { name: '0.7.8', sha: 'be0a3e47ec56ec71feeae0b67437449d5b4481e0' },
|
92 | { name: '0.7.7', sha: '43deb0f32a679f90d8b976555c99761e3dfea636' },
|
93 | { name: '0.7.6', sha: 'a9086c59481b1e8ed643c4a1bd4caef63bce8908' },
|
94 | { name: '0.7.5', sha: '8cb319afeb76288d1648ff0c09a43495bd80d401' },
|
95 | { name: '0.7.4', sha: '40a0c115e9cd963d77b12a54dd576d15657e8f41' },
|
96 | { name: '0.7.3', sha: 'fa4021a49f2a0810f3ee581f61cde5c18b3a1b64' },
|
97 | { name: '0.7.2', sha: '9c2e697131d8e132b99b1f6364ecfe115c186a04' },
|
98 | { name: '0.7.1', sha: '9253c0ee8b4bd37c528cafdff6be1c3696cd4fff' },
|
99 | { name: '0.7.0', sha: '8f397568ad763803941c4d9d4587ea1354fdd6e4' },
|
100 | { name: '0.6.0', sha: 'cd5fccfeb0baf9b490736022ff69fac743be3b4e' },
|
101 | { name: '0.5.4', sha: '7dd8048e69fe33d2cdbbc1b214dd907b5cb52f19' },
|
102 | { name: '0.5.3', sha: 'f19883a9a29d32649c9b6da7ed2ecfcfcdf5cbfc' },
|
103 | { name: '0.5.2', sha: 'c0bdb2eefac5cc30ac69c744231d4c95c6f15f4b' },
|
104 | { name: '0.5.1', sha: 'd29ebadbd38be26917a79f251f77f386dae4de7a' },
|
105 | { name: '0.5.0', sha: '82747f3eff789b5ea8fade040735b2c11b116eb8' }
|
106 | ];
|
107 | report.print();
|
108 | }());
|
109 | }
|