1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
// script to collect the weekly changelog in a git repo
var testing = false;
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, meta-ti@yoctoproject.org';
}
var path = require('path'),
child_process = require('child_process'),
fs = require('fs'),
nodemailer = require('nodemailer'),
git = require('./git'),
dateutil = require('./dateutil'),
config = require('./config').config
String.prototype.format = function() {
var formatted = this;
for (var i = 0; i < arguments.length; i++) {
var regexp = new RegExp('\\{'+i+'\\}', 'gi');
formatted = formatted.replace(regexp, arguments[i]);
}
return formatted;
};
var format_report = function(projects, weekly_data) {
var ret = ''
// report header
ret += "Changelog " + dateutil.last_week_text() + ". Projects included in this report:\n\n";
var project;
for (project in projects) {
ret += project + ": " + projects[project] + "\n";
}
ret += "\n";
for (project in projects) {
ret += "====================================================\n";
ret += "Changelog for " + project + ":\n\n";
ret += weekly_data[project];
}
return ret;
}
var email_report = function(report) {
console.log("send email ...")
var transport = nodemailer.createTransport(config.email.transport.type, config.email.transport.options)
var mailOptions = {
from: config.email.from,
to: email_to,
bcc: email_bcc,
subject: "OE Changelog " + dateutil.last_week_text(),
text: report
}
transport.sendMail(mailOptions, function(error, response) {
if (error) {
console.log("Failed to send email: " + response)
} else {
console.log("mail sent: " + response.message)
}
})
}
var run_changelog = function(projects) {
var output = {};
var count = Object.keys(projects).length;
var lastwk = dateutil.last_week();
console.log("start = " + lastwk.start + " end = " + lastwk.end)
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;
console.log("changelog finished for " + project)
}
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);
}
});
|