allexsdk
Version:
AllexJS sdk
77 lines (57 loc) • 2.61 kB
JavaScript
;
function createRelink (Lib, Node) {
'use strict';
var Fs = Node.Fs,
Path = Node.Path,
recognize = Lib.moduleRecognition,
AllexJS = require('allex_allexjshelperssdklib')(Lib),
ALLEX_WORKSPACE_DIR = AllexJS.ALLEX_WORKSPACE_DIR,
BaseWSWorkerClass = require('../baseclasses.js')(Lib, AllexJS).BaseWSWorkerClass,
Git = require('allex_githelperssdklib')(Lib),
Q = Lib.q,
WebAppTools = require('../../webalizer')(Lib).WebAppTools;
function doRelink (project, suitename, webapp){
if ('./' === webapp) return; ///TODO: anomaly to be resolved
var app = Path.resolve(ALLEX_WORKSPACE_DIR, 'projects', project, 'websolutions', suitename, webapp, '_generated'),
linkdirname = Path.resolve(ALLEX_WORKSPACE_DIR, '.webapps', project, suitename),
link = Path.resolve(linkdirname, webapp);
if (Fs.existsSync(link)) return;
try {
Fs.ensureDirSync(linkdirname);
Fs.symlinkSync (app, link);
}catch (ignore) {
}
}
function push_web_app (project, suitename) {
WebAppTools.findWebApps(Path.resolve(ALLEX_WORKSPACE_DIR, 'projects', project, 'websolutions', suitename)).forEach(doRelink.bind(null, project, suitename));
}
function find_in_solution(project, path){
Fs.readdirSync(path).forEach (push_web_app.bind(null, project))
}
function findSuite (project){
var pp = Path.resolve(ALLEX_WORKSPACE_DIR, 'projects', project, 'websolutions');
if (!Fs.dirExists(pp)) return;
Fs.readdirSync(pp).forEach (find_in_solution.bind(null, project, Path.resolve(ALLEX_WORKSPACE_DIR, 'projects', project, 'websolutions')));
}
function linkDeployment (item) {
var target = Path.resolve(ALLEX_WORKSPACE_DIR, '.webapps', item.project, item.name),
source = Path.resolve(ALLEX_WORKSPACE_DIR, 'projects', item.project, 'webdeployments', item.name);
if (!Fs.dirExists(source)) return;
if (Fs.existsSync(target)) return;
Fs.symlinkSync (source, target);
}
return function () {
var webappsdirname, projects;
webappsdirname = Path.resolve(ALLEX_WORKSPACE_DIR, '.webapps');
Node.Fs.ensureDirSync(webappsdirname);
Node.executeCommandSync ('find '+webappsdirname+' -type l -delete');
projects = Fs.readdirSync (Path.resolve(ALLEX_WORKSPACE_DIR, 'projects'));
projects.forEach (findSuite);
var webds = AllexJS.getAllexJSData().webdeployments;
if (webds){
Lib.traverseShallow (webds, linkDeployment);
}
return Q.resolve('ok');
};
}
module.exports = createRelink;