diff options
Diffstat (limited to 'tools/git-weekly-changelog.js')
-rw-r--r-- | tools/git-weekly-changelog.js | 113 |
1 files changed, 66 insertions, 47 deletions
diff --git a/tools/git-weekly-changelog.js b/tools/git-weekly-changelog.js index 4084b89..ebc362d 100644 --- a/tools/git-weekly-changelog.js +++ b/tools/git-weekly-changelog.js @@ -1,10 +1,20 @@ // script to collect the weekly changelog in a git repo +var testing = true; +var email_to = ''; +var email_bcc = 'cbrake@bec-systems.com,'; + +if (!testing) { + email_bcc += 'beagleboard@googlegroups.com'; + email_to += 'openembedded-core@lists.openembedded.org, openembedded-devel@lists.openembedded.org, angstrom-distro-devel@linuxtogo.org'; +} + var path = require('path'), child_process = require('child_process'), fs = require('fs'), - nodemailer = require('nodemailer'); - + nodemailer = require('nodemailer'), + git = require('./git'), + dateutil = require('./dateutil'); String.prototype.format = function() { var formatted = this; @@ -15,25 +25,21 @@ String.prototype.format = function() { return formatted; }; -var projects = ['meta-angstrom', 'meta-openembedded', 'meta-smartphone', 'meta-texasinstruments', 'openembedded-core', 'openembedded']; +var format_report = function(projects, weekly_data) { + var ret = '' + // report header + ret += "Changelog for " + dateutil.last_week_text() + ". Projects included in this report:\n\n"; + var project; + for (project in projects) { + ret += project + ": " + projects[project] + "\n"; + } -var date_range = function() { - var day = 1000*60*60*24; - var d = new Date(); - var today_weekday = d.getDay(); - var end_day = new Date(d.getTime() - today_weekday*day); - var start_day = new Date(end_day.getTime() - 7*day); - return "{0}-{1}-{2} to {3}-{4}-{5}".format(start_day.getFullYear(), start_day.getMonth(), start_day.getDate(), - end_day.getFullYear(), end_day.getMonth(), end_day.getDate()); -} + ret += "\n"; -var format_report = function(weekly_data) { - var ret = '' - for (var i=0; i < projects.length; i++) { - //console.log(project); + for (project in projects) { ret += "====================================================\n"; - ret += "Changelog for " + projects[i] + ":\n\n"; - ret += weekly_data[projects[i]]; + ret += "Changelog for " + project + ":\n\n"; + ret += weekly_data[project]; } return ret; } @@ -42,9 +48,9 @@ var email_report = function(report) { nodemailer.send_mail( { sender: "cliff.brake@gmail.com", - to: "openembedded-core@lists.openembedded.org, openembedded-devel@lists.openembedded.org, angstrom-distro-devel@linuxtogo.org", - bcc: "cbrake@bec-systems.com", - subject: "OE Changelog for " + date_range(), + to: email_to, + bcc: email_bcc, + subject: "OE Changelog for " + dateutil.last_week_text(), body: report }, function(error, success) { @@ -53,31 +59,44 @@ var email_report = function(report) { ); } -var output = {}; - -for (var i=0; i < projects.length; i++) { - var count = projects.length; - // FIXME: might be a better way to create closure for i than creating run_exec - var run_exec = function(i) { - console.log('processing: ' + path.join(__dirname, '../', projects[i])); - process.chdir(path.join(__dirname, '../', projects[i])); - child_process.exec('../tools/weekly-changelog-report.py', function(error, stdout, stderr) { - console.log('stderr: ' + stderr); - if (error !== null) { - console.log('exec error: ' + error); - } else { - output[projects[i]] = stdout; - } - count--; - if (count === 0) { - var r = format_report(output); - process.chdir(path.join(__dirname, '../')); - var f = fs.openSync('weekly-changelog', 'w'); - fs.writeSync(f, r); - fs.closeSync(f); - email_report(r); - } - }); - }(i); +var run_changelog = function(projects) { + var output = {}; + var count = Object.keys(projects).length; + var lastwk = dateutil.last_week(); + var project; + for (project in projects) { + // function required to preserve the value of project + (function(project) { + console.log('processing: ' + path.join(__dirname, '../', project)); + var repo_dir = path.join(__dirname, '../', project); + child_process.exec('cd ' + repo_dir + '; git fetch', function(error, stdout, stderr) { + git.changelog(repo_dir, lastwk.start, lastwk.end, function(err, changelog) { + if (err !== null) { + console.log('changelog error: ' + err); + } else { + output[project] = changelog; + } + count--; + if (count === 0) { + var r = format_report(projects, output); + process.chdir(path.join(__dirname, '../')); + var f = fs.openSync('weekly-changelog', 'w'); + fs.writeSync(f, r); + fs.closeSync(f); + email_report(r); + } + }); + }); + })(project); + } } +git.parse_gitmodules(path.join(__dirname, "../.gitmodules"), function(err, data) { + if (err) { + console.log("Error parsing .gitmodules"); + } else { + run_changelog(data); + } +}); + + |