8000 angular.js/changelog.js at master · abyu/angular.js · GitHub
[go: up one dir, main page]

Skip to content
< 6ABF script type="application/json" data-target="react-app.embeddedData">{"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":".externalToolBuilders","path":".externalToolBuilders","contentType":"directory"},{"name":".settings","path":".settings","contentType":"directory"},{"name":"css","path":"css","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"example","path":"example","contentType":"directory"},{"name":"i18n","path":"i18n","contentType":"directory"},{"name":"images","path":"images","contentType":"directory"},{"name":"lib","path":"lib","contentType":"directory"},{"name":"logs","path":"logs","contentType":"directory"},{"name":"perf","path":"perf","contentType":"directory"},{"name":"regression","path":"regression","contentType":"directory"},{"name":"src","path":"src","contentType":"directory"},{"name":"test","path":"test","contentType":"directory"},{"name":"tmp","path":"tmp","contentType":"directory"},{"name":".gitattributes","path":".gitattributes","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".project","path":".project","contentType":"file"},{"name":".travis.yml","path":".travis.yml","contentType":"file"},{"name":"CHANGELOG.md","path":"CHANGELOG.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"Rakefile","path":"Rakefile","contentType":"file"},{"name":"angularFiles.js","path":"angularFiles.js","contentType":"file"},{"name":"changelog.js","path":"changelog.js","contentType":"file"},{"name":"changelog.spec.js","path":"changelog.spec.js","contentType":"file"},{"name":"changelog.tmp.md","path":"changelog.tmp.md","contentType":"file"},{"name":"check-size.sh","path":"check-size.sh","contentType":"file"},{"name":"gdocs.js","path":"gdocs.js","contentType":"file"},{"name":"gen_docs.sh","path":"gen_docs.sh","contentType":"file"},{"name":"init-repo.sh","path":"init-repo.sh","contentType":"file"},{"name":"nodeserver.sh","path":"nodeserver.sh","contentType":"file"},{"name":"package.json","path":"package.json","contentType":"file"},{"name":"release-commit.sh","path":"release-commit.sh","contentType":"file"},{"name":"start-iteration.sh","path":"start-iteration.sh","contentType":"file"},{"name":"testacular-e2e.conf.js","path":"testacular-e2e.conf.js","contentType":"file"},{"name":"testacular-jqlite.conf.js","path":"testacular-jqlite.conf.js","contentType":"file"},{"name":"testacular-jquery.conf.js","path":"testacular-jquery.conf.js","contentType":"file"},{"name":"testacular-modules.conf.js","path":"testacular-modules.conf.js","contentType":"file"},{"name":"validate-commit-msg.js","path":"validate-commit-msg.js","contentType":"file"},{"name":"validate-commit-msg.spec.js","path":"validate-commit-msg.spec.js","contentType":"file"},{"name":"version.js","path":"version.js","contentType":"file"},{"name":"version.yaml","path":"version.yaml","contentType":"file"},{"name":"watchr-docs.rb","path":"watchr-docs.rb","contentType":"file"}],"totalCount":44}},"fileTreeProcessingTime":10.022056999999998,"foldersToFetch":[],"incompleteFileTree":false,"repo":{"id":7104350,"defaultBranch":"master","name":"angular.js","ownerLogin":"abyu","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2012-12-11T02:10:08.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/856498?v=4","public":true,"private":false,"isOrgOwned":false},"codeLineWrapEnabled":false,"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"master","listCacheKey":"v0:1613558754.960054","canEdit":false,"refType":"branch","currentOid":"a66c968df286f90ef39f04f7bef2d82557469268"},"path":"changelog.js","currentUser":null,"blob":{"rawLines":["#!/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 = '\u003ca name=\"%s\"\u003e\u003c/a\u003e\\n# %s (%s)\\n\\n';","var LINK_ISSUE = '[#%s](https://github.com/angular/angular.js/issues/%s)';","var LINK_COMMIT = '[%s](https://github.com/angular/angular.js/commit/%s)';","","var EMPTY_COMPONENT = '$$';","var MAX_SUBJECT_LENGTH = 80;","","","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\\s#(\\d+)/);"," if (match) msg.closes.push(parseInt(match[1]));"," });"," "," match = raw.match(/BREAKING CHANGE:([\\s\\S]*)/);"," if (match) {"," console.log('found!!!')"," msg.breaks.push(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;"," }",""," if (match[3].length \u003e MAX_SUBJECT_LENGTH) {"," warn('Too long subject: %s %s', msg.hash, msg.subject);"," match[3] = match[3].substr(0, MAX_SUBJECT_LENGTH);"," }",""," 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) {"," 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 \u003e 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) {"," stream.write(util.format('%s %s (%s', prefix, commit.subject, linkToCommit(commit.hash)));"," if (commit.closes.length) {"," stream.write(', closes ' + commit.closes.map(linkToIssue).join(', '));"," }"," stream.write(')\\n');"," });"," });",""," stream.write('\\n');","};","","","var readGitLog = function(grep, from) {"," var deffered = 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);"," });",""," deffered.resolve(commits);"," });",""," return deffered.promise;","};","","","var writeChangelog = function(stream, commits, version) {"," var sections = {"," fix: {},"," feat: {},"," 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);"," }",""," commit.breaks.forEach(function(breakMsg) {"," sections.breaks[EMPTY_COMPONENT].push({"," subject: breakMsg,"," 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, 'Breaking Changes', sections.breaks);","}","","","var getPreviousTag = function() {"," var deffered = q.defer();"," child.exec(GIT_TAG_CMD, function(code, stdout, stderr) {"," if (code) deffered.reject('Cannot get the previous tag.');"," else deffered.resolve(stdout.replace('\\n', ''));"," });"," return deffered.promise;","};","","","var generate = function(version, file) {"," getPreviousTag().then(function(tag) {"," console.log('Reading git log since', tag);"," readGitLog('^fix|^feat|Breaks', 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]);","}"],"stylingDirectives":null,"colorizedLines":null,"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/abyu/angular.js/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"changelog.js","displayUrl":"https://github.com/abyu/angular.js/blob/master/changelog.js?raw=true","headerInfo":{"blobSize":"5.13 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"746b0f9","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fabyu%2Fangular.js%2Fblob%2Fmaster%2Fchangelog.js","isCSV":false,"isRichtext":false,"toc":null,"lineInfo":{"truncatedLoc":"205","truncatedSloc":"151"},"mode":"executable file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"issueTemplate":null,"discussionTemplate":null,"language":"JavaScript","languageID":183,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/abyu/angular.js/blob/master/changelog.js","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/abyu/angular.js/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/abyu/angular.js/raw/refs/heads/master/changelog.js","renderImageOrRaw":false,"richText":null,"renderedFileInfo":null,"shortPath":null,"symbolsEnabled":true,"tabSize":8,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"warn","kind":"function","ident_start":658,"ident_end":662,"extent_start":658,"extent_end":742,"fully_qualified_name":"warn","ident_utf16":{"start":{"line_number":21,"utf16_col":4},"end":{"line_number":21,"utf16_col":8}},"extent_utf16":{"start":{"line_number":21,"utf16_col":4},"end":{"line_number":23,"utf16_col":1}}},{"name":"parseRawCommit","kind":"function","ident_start":750,"ident_end":764,"extent_start":750,"extent_end":1701,"fully_qualified_name":"parseRawCommit","ident_utf16":{"start":{"line_number":26,"utf16_col":4},"end":{"line_number":26,"utf16_col":18}},"extent_utf16":{"start":{"line_number":26,"utf16_col":4},"end":{"line_number":67,"utf16_col":1}}},{"name":"linkToIssue","kind":"function","ident_start":1709,"ident_end":1720,"extent_start":1709,"extent_end":1790,"fully_qualified_name":"linkToIssue","ident_utf16":{"start":{"line_number":70,"utf16_col":4},"end":{"line_number":70,"utf16_col":15}},"extent_utf16":{"start":{"line_number":70,"utf16_col":4},"end":{"line_number":72,"utf16_col":1}}},{"name":"linkToCommit","kind":"function","ident_start":1798,"ident_end":1810,"extent_start":1798,"extent_end":1891,"fully_qualified_name":"linkToCommit","ident_utf16":{"start":{"line_number":75,"utf16_col":4},"end":{"line_number":75,"utf16_col":16}},"extent_utf16":{"start":{"line_number":75,"utf16_col":4},"end":{"line_number":77,"utf16_col":1}}},{"name":"currentDate","kind":"function","ident_start":1899,"ident_end":1910,"extent_start":1899,"extent_end":2114,"fully_qualified_name":"currentDate","ident_utf16":{"start":{"line_number":80,"utf16_col":4},"end":{"line_number":80,"utf16_col":15}},"extent_utf16":{"start":{"line_number":80,"utf16_col":4},"end":{"line_number":87,"utf16_col":1}}},{"name":"pad","kind":"function","ident_start":1956,"ident_end":1959,"extent_start":1956,"extent_end":2012,"fully_qualified_name":"pad","ident_utf16":{"start":{"line_number":82,"utf16_col":6},"end":{"line_number":82,"utf16_col":9}},"extent_utf16":{"start":{"line_number":82,"utf16_col":6},"end":{"line_number":84,"utf16_col":3}}},{"name":"printSection","kind":"function","ident_start":2122,"ident_end":2134,"extent_start":2122,"extent_end":2970,"fully_qualified_name":"printSection","ident_utf16":{"start":{"line_number":90,"utf16_col":4},"end":{"line_number":90,"utf16_col":16}},"extent_utf16":{"start":{"line_number":90,"utf16_col":4},"end":{"line_number":120,"utf16_col":1}}},{"name":"readGitLog","kind":"function","ident_start":2978,"ident_end":2988,"extent_start":2978,"extent_end":3460,"fully_qualified_name":"readGitLog","ident_utf16":{"start":{"line_number":123,"utf16_col":4},"end":{"line_number":123,"utf16_col":14}},"extent_utf16":{"start":{"line_number":123,"utf16_col":4},"end":{"line_number":139,"utf16_col":1}}},{"name":"writeChangelog","kind":"function","ident_start":3468,"ident_end":3482,"extent_start":3468,"extent_end":4314,"fully_qualified_name":"writeChangelog","ident_utf16":{"start":{"line_number":142,"utf16_col":4},"end":{"line_number":142,"utf16_col":18}},"extent_utf16":{"start":{"line_number":142,"utf16_col":4},"end":{"line_number":173,"utf16_col":1}}},{"name":"getPreviousTag","kind":"function","ident_start":4321,"ident_end":4335,"extent_start":4321,"extent_end":4588,"fully_qualified_name":"getPreviousTag","ident_utf16":{"start":{"line_number":176,"utf16_col":4},"end":{"line_number":176,"utf16_col":18}},"extent_utf16":{"start":{"line_number":176,"utf16_col":4},"end":{"line_number":183,"utf16_col":1}}},{"name":"generate","kind":"function","ident_start":4596,"ident_end":4604,"extent_start":4596,"extent_end":5032,"fully_qualified_name":"generate","ident_utf16":{"start":{"line_number":186,"utf16_col":4},"end":{"line_number":186,"utf16_col":12}},"extent_utf16":{"start":{"line_number":186,"utf16_col":4},"end":{"line_number":195,"utf16_col":1}}}]}},"copilotInfo":null,"copilotAccessAllowed":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"csrf_tokens":{"/abyu/angular.js/branches":{"post":"iTX8WVRz3g1jzeS1fcAKBb-Ue5OGesQmYQitxzpS4g6WidZDZ2jCeNUIoK6R6qqV7djV8eGQ4ZegDNygqcm6YQ"},"/repos/preferences":{"post":"Yh3cswFEIAO5EMW5_ylALO9Q2Rfz-nX0jAOHjxNn4TR2wtEOGcmMKT4HKwDXh2aZPGSUqO2ushUPfglj3OBH4Q"}}},"title":"angular.js/changelog.js at master · abyu/angular.js","appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-263cab1760dd.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-1b17b3e7786a.js","githubDevUrl":null,"enabled_features":{"code_nav_ui_events":false,"react_blob_overlay":false,"accessible_code_button":true}}}
0