Index: third_party/pkg/angular/scripts/changelog/changelog.js |
diff --git a/third_party/pkg/angular/scripts/changelog/changelog.js b/third_party/pkg/angular/scripts/changelog/changelog.js |
deleted file mode 100755 |
index 2177100a308a7ebba86a6c783e4ee01cb300afa8..0000000000000000000000000000000000000000 |
--- a/third_party/pkg/angular/scripts/changelog/changelog.js |
+++ /dev/null |
@@ -1,206 +0,0 @@ |
-#!/usr/bin/env node |
- |
-// TODO(vojta): pre-commit hook for validating messages |
-// TODO(vojta): report errors, currently Q silence everything which really sucks |
- |
-var child = require('child_process'); |
-var fs = require('fs'); |
-var util = require('util'); |
-var q = require('qq'); |
- |
-var GIT_LOG_CMD = 'git log --grep="%s" -E --format=%s %s..HEAD'; |
-var GIT_TAG_CMD = 'git describe --tags --abbrev=0'; |
- |
-var HEADER_TPL = '<a name="%s"></a>\n# %s (%s)\n\n'; |
-var LINK_ISSUE = '[#%s](https://github.com/angular/angular.dart/issues/%s)'; |
-var LINK_COMMIT = '[%s](https://github.com/angular/angular.dart/commit/%s)'; |
- |
-var EMPTY_COMPONENT = '$$'; |
- |
- |
-var warn = function() { |
- console.log('WARNING:', util.format.apply(null, arguments)); |
-}; |
- |
- |
-var parseRawCommit = function(raw) { |
- if (!raw) return null; |
- |
- var lines = raw.split('\n'); |
- var msg = {}, match; |
- |
- msg.hash = lines.shift(); |
- msg.subject = lines.shift(); |
- msg.closes = []; |
- msg.breaks = []; |
- |
- lines.forEach(function(line) { |
- match = line.match(/(?:Closes|Fixes)\s#(\d+)/); |
- if (match) msg.closes.push(parseInt(match[1])); |
- }); |
- |
- match = raw.match(/BREAKING CHANGE:([\s\S]*)/); |
- if (match) { |
- msg.breaking = match[1]; |
- } |
- |
- |
- msg.body = lines.join('\n'); |
- match = msg.subject.match(/^(.*)\((.*)\)\:\s(.*)$/); |
- |
- if (!match || !match[1] || !match[3]) { |
- warn('Incorrect message: %s %s', msg.hash, msg.subject); |
- return null; |
- } |
- |
- msg.type = match[1]; |
- msg.component = match[2]; |
- msg.subject = match[3]; |
- |
- return msg; |
-}; |
- |
- |
-var linkToIssue = function(issue) { |
- return util.format(LINK_ISSUE, issue, issue); |
-}; |
- |
- |
-var linkToCommit = function(hash) { |
- return util.format(LINK_COMMIT, hash.substr(0, 8), hash); |
-}; |
- |
- |
-var currentDate = function() { |
- var now = new Date(); |
- var pad = function(i) { |
- return ('0' + i).substr(-2); |
- }; |
- |
- return util.format('%d-%s-%s', now.getFullYear(), pad(now.getMonth() + 1), pad(now.getDate())); |
-}; |
- |
- |
-var printSection = function(stream, title, section, printCommitLinks) { |
- printCommitLinks = printCommitLinks === undefined ? true : printCommitLinks; |
- var components = Object.getOwnPropertyNames(section).sort(); |
- |
- if (!components.length) return; |
- |
- stream.write(util.format('\n## %s\n\n', title)); |
- |
- components.forEach(function(name) { |
- var prefix = '-'; |
- var nested = section[name].length > 1; |
- |
- if (name !== EMPTY_COMPONENT) { |
- if (nested) { |
- stream.write(util.format('- **%s:**\n', name)); |
- prefix = ' -'; |
- } else { |
- prefix = util.format('- **%s:**', name); |
- } |
- } |
- |
- section[name].forEach(function(commit) { |
- if (printCommitLinks) { |
- stream.write(util.format('%s %s\n (%s', prefix, commit.subject, linkToCommit(commit.hash))); |
- if (commit.closes.length) { |
- stream.write(',\n ' + commit.closes.map(linkToIssue).join(', ')); |
- } |
- stream.write(')\n'); |
- } else { |
- stream.write(util.format('%s %s', prefix, commit.subject)); |
- } |
- }); |
- }); |
- |
- stream.write('\n'); |
-}; |
- |
- |
-var readGitLog = function(grep, from) { |
- var deferred = q.defer(); |
- |
- // TODO(vojta): if it's slow, use spawn and stream it instead |
- child.exec(util.format(GIT_LOG_CMD, grep, '%H%n%s%n%b%n==END==', from), function(code, stdout, stderr) { |
- var commits = []; |
- |
- stdout.split('\n==END==\n').forEach(function(rawCommit) { |
- var commit = parseRawCommit(rawCommit); |
- if (commit) commits.push(commit); |
- }); |
- |
- deferred.resolve(commits); |
- }); |
- |
- return deferred.promise; |
-}; |
- |
- |
-var writeChangelog = function(stream, commits, version) { |
- var sections = { |
- fix: {}, |
- feat: {}, |
- perf: {}, |
- breaks: {} |
- }; |
- |
- sections.breaks[EMPTY_COMPONENT] = []; |
- |
- commits.forEach(function(commit) { |
- var section = sections[commit.type]; |
- var component = commit.component || EMPTY_COMPONENT; |
- |
- if (section) { |
- section[component] = section[component] || []; |
- section[component].push(commit); |
- } |
- |
- if (commit.breaking) { |
- sections.breaks[component] = sections.breaks[component] || []; |
- sections.breaks[component].push({ |
- subject: util.format("due to %s,\n %s", linkToCommit(commit.hash), commit.breaking), |
- hash: commit.hash, |
- closes: [] |
- }); |
- }; |
- }); |
- |
- stream.write(util.format(HEADER_TPL, version, version, currentDate())); |
- printSection(stream, 'Bug Fixes', sections.fix); |
- printSection(stream, 'Features', sections.feat); |
- printSection(stream, 'Performance Improvements', sections.perf); |
- printSection(stream, 'Breaking Changes', sections.breaks, false); |
-} |
- |
- |
-var getPreviousTag = function() { |
- var deferred = q.defer(); |
- child.exec(GIT_TAG_CMD, function(code, stdout, stderr) { |
- if (code) deferred.reject('Cannot get the previous tag.'); |
- else deferred.resolve(stdout.replace('\n', '')); |
- }); |
- return deferred.promise; |
-}; |
- |
- |
-var generate = function(version, file) { |
- getPreviousTag().then(function(tag) { |
- console.log('Reading git log since', tag); |
- readGitLog('^fix|^feat|^perf|BREAKING', tag).then(function(commits) { |
- console.log('Parsed', commits.length, 'commits'); |
- console.log('Generating changelog to', file || 'stdout', '(', version, ')'); |
- writeChangelog(file ? fs.createWriteStream(file) : process.stdout, commits, version); |
- }); |
- }); |
-}; |
- |
- |
-// publish for testing |
-exports.parseRawCommit = parseRawCommit; |
- |
-// hacky start if not run by jasmine :-D |
-if (process.argv.join('').indexOf('jasmine-node') === -1) { |
- generate(process.argv[2], process.argv[3]); |
-} |