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

Skip to content
< 69CE script type="application/json" data-target="react-app.embeddedData">{"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"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":"src","path":"src","contentType":"directory"},{"name":"test","path":"test","contentType":"directory"},{"name":".gitignore","path":".gitignore","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":"Gruntfile.js","path":"Gruntfile.js","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","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":"karma-e2e.conf.js","path":"karma-e2e.conf.js","contentType":"file"},{"name":"karma-jqlite.conf.js","path":"karma-jqlite.conf.js","contentType":"file"},{"name":"karma-jquery.conf.js","path":"karma-jquery.conf.js","contentType":"file"},{"name":"karma-modules.conf.js","path":"karma-modules.conf.js","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":"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":36}},"fileTreeProcessingTime":9.930842,"foldersToFetch":[],"incompleteFileTree":false,"repo":{"id":9380293,"defaultBranch":"master","name":"angular.js","ownerLogin":"iffy","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2013-04-11T21:06:17.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/161727?v=4","public":true,"private":false,"isOrgOwned":false},"codeLineWrapEnabled":false,"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"master","listCacheKey":"v0:1613559014.406374","canEdit":false,"refType":"branch","currentOid":"10bfbe7cfe6519169876cba9281a5518ffa48450"},"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|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;"," }",""," 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, 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 \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) {"," 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: {},"," 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, '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|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":"/iffy/angular.js/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"changelog.js","displayUrl":"https://github.com/iffy/angular.js/blob/master/changelog.js?raw=true","headerInfo":{"blobSize":"5.44 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":"c331c7c","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fiffy%2Fangular.js%2Fblob%2Fmaster%2Fchangelog.js","isCSV":false,"isRichtext":false,"toc":null,"lineInfo":{"truncatedLoc":"210","truncatedSloc":"156"},"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":"/iffy/angular.js/blob/master/changelog.js","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/iffy/angular.js/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/iffy/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":1677,"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":66,"utf16_col":1}}},{"name":"linkToIssue","kind":"function","ident_start":1685,"ident_end":1696,"extent_start":1685,"extent_end":1766,"fully_qualified_name":"linkToIssue","ident_utf16":{"start":{"line_number":69,"utf16_col":4},"end":{"line_number":69,"utf16_col":15}},"extent_utf16":{"start":{"line_number":69,"utf16_col":4},"end":{"line_number":71,"utf16_col":1}}},{"name":"linkToCommit","kind":"function","ident_start":1774,"ident_end":1786,"extent_start":1774,"extent_end":1867,"fully_qualified_name":"linkToCommit","ident_utf16":{"start":{"line_number":74,"utf16_col":4},"end":{"line_number":74,"utf16_col":16}},"extent_utf16":{"start":{"line_number":74,"utf16_col":4},"end":{"line_number":76,"utf16_col":1}}},{"name":"currentDate","kind":"function","ident_start":1875,"ident_end":1886,"extent_start":1875,"extent_end":2090,"fully_qualified_name":"currentDate","ident_utf16":{"start":{"line_number":79,"utf16_col":4},"end":{"line_number":79,"utf16_col":15}},"extent_utf16":{"start":{"line_number":79,"utf16_col":4},"end":{"line_number":86,"utf16_col":1}}},{"name":"pad","kind":"function","ident_start":1932,"ident_end":1935,"extent_start":1932,"extent_end":1988,"fully_qualified_name":"pad","ident_utf16":{"start":{"line_number":81,"utf16_col":6},"end":{"line_number":81,"utf16_col":9}},"extent_utf16":{"start":{"line_number":81,"utf16_col":6},"end":{"line_number":83,"utf16_col":3}}},{"name":"printSection","kind":"function","ident_start":2098,"ident_end":2110,"extent_start":2098,"extent_end":3174,"fully_qualified_name":"printSection","ident_utf16":{"start":{"line_number":89,"utf16_col":4},"end":{"line_number":89,"utf16_col":16}},"extent_utf16":{"start":{"line_number":89,"utf16_col":4},"end":{"line_number":124,"utf16_col":1}}},{"name":"readGitLog","kind":"function","ident_start":3182,"ident_end":3192,"extent_start":3182,"extent_end":3664,"fully_qualified_name":"readGitLog","ident_utf16":{"start":{"line_number":127,"utf16_col":4},"end":{"line_number":127,"utf16_col":14}},"extent_utf16":{"start":{"line_number":127,"utf16_col":4},"end":{"line_number":143,"utf16_col":1}}},{"name":"writeChangelog","kind":"function","ident_start":3672,"ident_end":3686,"extent_start":3672,"extent_end":4633,"fully_qualified_name":"writeChangelog","ident_utf16":{"start":{"line_number":146,"utf16_col":4},"end":{"line_number":146,"utf16_col":18}},"extent_utf16":{"start":{"line_number":146,"utf16_col":4},"end":{"line_number":178,"utf16_col":1}}},{"name":"getPreviousTag","kind":"function","ident_start":4640,"ident_end":4654,"extent_start":4640,"extent_end":4907,"fully_qualified_name":"getPreviousTag","ident_utf16":{"start":{"line_number":181,"utf16_col":4},"end":{"line_number":181,"utf16_col":18}},"extent_utf16":{"start":{"line_number":181,"utf16_col":4},"end":{"line_number":188,"utf16_col":1}}},{"name":"generate","kind":"function","ident_start":4915,"ident_end":4923,"extent_start":4915,"extent_end":5351,"fully_qualified_name":"generate","ident_utf16":{"start":{"line_number":191,"utf16_col":4},"end":{"line_number":191,"utf16_col":12}},"extent_utf16":{"start":{"line_number":191,"utf16_col":4},"end":{"line_number":200,"utf16_col":1}}}]}},"copilotInfo":null,"copilotAccessAllowed":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"csrf_tokens":{"/iffy/angular.js/branches":{"post":"7Z-2Wy5r3zwGbl0SofQpA-EqvmUTps3Thg8zfNWP2rTJiBt3d7g_WDJ5L121Aj3KS9pBvwrc6zsphLwTHPvJHQ"},"/repos/preferences":{"post":"XcnoS9hlUsNDX1pmRuRuee69lJPP1oRIy0AGhmLwqN4zSb7UGCmvH9-viF3cjKdue8Q0CHWH7Dpi8TecJ4bv8Q"}}},"title":"angular.js/changelog.js at master · iffy/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