diff --git a/BuildServer/lib/builder.js b/BuildServer/lib/builder.js index 5fd30b0..45ac37f 100644 --- a/BuildServer/lib/builder.js +++ b/BuildServer/lib/builder.js @@ -62,7 +62,7 @@ var build = function (options, callback) { warnMessage = result && result.warns ? ((result.warns.$allMessages || [])[0] || {}).message : err, infoMessage = result && result.infos ? ((result.infos.$allMessages || []).slice(-1)[0] || {}).message : err; - fs.writeFile(release + "/report.json", JSON.stringify({err: err, result: result}), function (writeErr) { + fs.writeFile(release + "/report.json", JSON.stringify({date: Date.now(), err: err, result: result}), function (writeErr) { statusQueue.push(function (callback) { async.parallel([ function (callback) { diff --git a/BuildServer/routes/release.js b/BuildServer/routes/release.js index d0581f2..cdd7bfa 100644 --- a/BuildServer/routes/release.js +++ b/BuildServer/routes/release.js @@ -1,7 +1,48 @@ "use strict"; -var path = require('path'); -var Zip = require('adm-zip'); +var path = require('path'), + fs = require('fs'), + Zip = require('adm-zip'); + +var getReport = function(releasePath, callback) { + var reportFile = releasePath + "/report.json"; + + fs.exists(reportFile, function (exists) { + if (!exists) { + return callback("ReportFileNotFound"); + } + + return fs.readFile(reportFile, function (err, dataBuffer) { + if (err) { + return callback(err, options); + } + var data = dataBuffer.toString(); + if (!data) { + return callback("ReportFileNotFound", options); + } + var report = JSON.parse(data); + return callback(null, report); + }); + }); +}; + +var getDatePart = function (report) { + if (!report.date) { + return "unknowndate"; + } + + var date = new Date(report.date), + paddingLeft = function (str, paddingValue) { + return String(paddingValue + str).slice(-paddingValue.length); + }; + + return date.getFullYear() + "." + + paddingLeft(date.getMonth() + 1, "00") + "." + + paddingLeft(date.getDate(), "00") + "." + + paddingLeft(date.getHours(), "00") + "." + + paddingLeft(date.getMinutes(), "00") + "." + + paddingLeft(date.getSeconds(), "00"); +}; module.exports = function(req, res, next) { var options = { @@ -15,11 +56,17 @@ module.exports = function(req, res, next) { var zip = new Zip(), releasePath = path.normalize(req.app.get('releasepath') + "/" + options.owner + "/" + options.reponame + "/" + options.branch + "/" + options.rev + "/"); - zip.addLocalFolder(releasePath); - zip.toBuffer(function (buffer) { - res.attachment(options.reponame + '.' + options.rev + '.zip', '.'); - res.send(buffer); - }, function (error) { - next(error); - }, function () { }, function () { }); + getReport(releasePath, function (err, report) { + if (err) { + return next(err); + } + + zip.addLocalFolder(releasePath); + zip.toBuffer(function (buffer) { + res.attachment(options.reponame + '.' + getDatePart(report) + '.' + options.rev + '.zip', '.'); + res.send(buffer); + }, function (error) { + next(error); + }, function () { }, function () { }); + }); };