From d154043310f25ee72fb85b4cb569099b9b555708 Mon Sep 17 00:00:00 2001
From: jweg <jweg@informatik.uni-kiel.de>
Date: Wed, 5 Jul 2017 14:00:14 +0200
Subject: [PATCH] initializer for cloning git repo at beginning added, promises
 for synchronizing createZip() removed

---
 app.js                   | 51 +++++++++++++++++++++++-----------------
 initializers/gitRepos.js | 37 +++++++++++++++++++++++++++++
 package.json             |  2 +-
 3 files changed, 67 insertions(+), 23 deletions(-)
 create mode 100644 initializers/gitRepos.js

diff --git a/app.js b/app.js
index f03e3d5..5a39083 100644
--- a/app.js
+++ b/app.js
@@ -10,8 +10,9 @@ var Zip        = require('node-zip');
 var JSZip = require('jszip');
 
 var exphbs = require('express-handlebars');
-var logger = require('morgan');
 
+//initializer
+var nanit = require('nanit');
 //load names of available download files
 var downloadFiles = require('./downloadFiles.json');
 var downloadNames = Object.keys(downloadFiles);
@@ -22,16 +23,31 @@ app.use(bodyParser.urlencoded({
   extended: true
 }));
 app.use(bodyParser.json());
-app.use(logger("short"));
-
 
 //set handlebars as view engine
 app.engine('.hbs', exphbs({extname: '.hbs'}));
 app.set('view engine', '.hbs');
 
+//initialize the git repos
+//TODO error handling is not working properly, error returned is not in var error, but in req + req and res are undefined!
+// nanit.initialize(downloadFiles, function(req,res,err){
+// // console.log('err in nanit.initialize:', err);
+// // console.log('req in nanit.initialize:', req);
+// // console.log('res in nanit.initialize:', res);
+
+// var response = 
+//           'There was an error during cloning the git repositories. ' +
+//           'Please contact "explorviz-developers-request@listserv.dfn.de" ' +
+//           'and add the following information: ' + req;
+// 	if(err){
+// 		console.log('nanit.initialize error');
+// 		res.send(response);
+// 		return;
+// 	};
 
-//routes
+// });
 
+//routes
 app.get('/', function(req, res){
 res.render('home', {downloadFiles: downloadNames});
 });
@@ -50,7 +66,7 @@ if(typeof checkedFiles !== 'undefined' && checkedFiles.length > 0){
 
 
 app.get('/download', function(req, res){
-var promises=[];
+
 const checkedFiles = req.query.checkedFiles.split(',');
 
 var zip = new JSZip();
@@ -70,10 +86,9 @@ if (backendChecked){
  const fileName = backendChecked;
  const downloadURL = downloadFiles[backendChecked]; 
 
- //exec('git clone ' + downloadURL + ' ' + fileName + ' && cd ' + fileName + ' && mvn compile war:war ', (error, stdout, stderr) => {
  exec('git pull ' + ' && cd ' + fileName + ' && mvn compile war:war ', (error, stdout, stderr) => {
 
- promises.push(new Promise(addBackend()));
+ addBackend();
    
     var response = 
           'There was an error during your build. ' +
@@ -101,7 +116,6 @@ if (frontendChecked){
  const fileName = frontendChecked;
  const downloadURL = downloadFiles[frontendChecked]; 
 
-//exec('git clone ' + downloadURL + ' ' + fileName + ' && cd '+ fileName + ' && npm install', (error, stdout, stderr) => {
 exec('git pull ', (error, stdout, stderr) => {
 installAddons();
   var response = 
@@ -153,8 +167,8 @@ function buildFrontend(){
 exec('cd explorviz-ui-frontend && ember build --environment=production', (error, stdout, stderr) => {
 //exec('cd explorviz-ui-frontend', (error, stdout, stderr) => {
 
-var frontendP = new Promise(addFrontend(resolve,reject)); 
- promises.push(frontendP);
+addFrontend(); 
+
 
   var response = 
           'There was an error during your build. ' +
@@ -183,7 +197,7 @@ backendFinished = true;
 createZip();
 };
 
-function addFrontend(resolve,reject){
+function addFrontend(){
 	console.log("in addFrontend");
 
 var stream = fsReaddir('./explorviz-ui-frontend/dist/')
@@ -198,19 +212,13 @@ var stream = fsReaddir('./explorviz-ui-frontend/dist/')
 
 }).on('finish',function(){
 	frontendFinished = true;
-	//return printFinished();
+	createZip();
 });
-console.log('stream',stream);	
 };
 
-function printFinished(resolve,reject){
-console.log('frontendFinished');
-}
 
-console.log('promises' ,promises);
-console.log('promises.length', promises.length);
-if (promises.length){
-Promise.all(promises).then(function createZip(){
+
+function createZip(){
 	console.log('frontendFinished', frontendFinished);
 	console.log('backendFinished', backendFinished);
 	//if(frontendFinished){
@@ -227,8 +235,7 @@ Promise.all(promises).then(function createZip(){
 }); 
 //} 
 
-});
-}
+};
 // } else if (frontendFinished) {//!backendChecked
 // 	console.log('frontend only');
 // zip.generateNodeStream({type:'nodebuffer',streamFiles:true}).pipe(fs.createWriteStream('explorviz-builds.zip')).on('finish', function () {
diff --git a/initializers/gitRepos.js b/initializers/gitRepos.js
new file mode 100644
index 0000000..25380fc
--- /dev/null
+++ b/initializers/gitRepos.js
@@ -0,0 +1,37 @@
+var express    = require('express');
+var exec       = require('child_process').exec;
+
+
+//Clone the git repos initially for performance.
+//TODO error handling is not working properly, error returned is not in var error, but in req
+function initGitRepos(downloadFiles, next){
+  const backendName= 'explorviz-ui-backend';
+  const downloadBackend= downloadFiles[backendName];
+exec('git clone ' + downloadBackend, (error, stdout, stderr) => {
+  
+    if (error) {
+      console.log('initGitRepos: backendFailed');
+      return next(error);
+    }
+
+    console.log(stdout);
+    console.log(stderr);
+});
+ 
+ const frontendName='explorviz-ui-frontend';
+ const downloadFrontend= downloadFiles[frontendName];
+ exec('git clone ' + downloadFrontend + ' ' + frontendName + ' && cd '+ frontendName + ' && npm install', (error, stdout, stderr) => {
+  
+    if (error) {
+      console.log('initGitRepos: frontendFailed');
+          return next(error);
+    }
+
+    console.log(stdout);
+    console.log(stderr);
+});
+
+
+next();
+};
+module.exports = initGitRepos;
\ No newline at end of file
diff --git a/package.json b/package.json
index f9f2c8c..eb9afe7 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,7 @@
     "fs": "0.0.1-security",
     "fs-readdir": "0.0.3",
     "jszip": "^3.1.3",
-    "morgan": "^1.8.2",
+    "nanit": "^0.3.1",
     "node-zip": "^1.1.1",
     "path": "^0.12.7"
   },
-- 
GitLab