|
|
|
|
|
|
|
|
var repolog = require('./repolog') |
|
|
var repolog = require('./repolog') |
|
|
|
|
|
var path = require('path'); |
|
|
|
|
|
var utils = require('bbhverse'); |
|
|
|
|
|
var any = utils.any; |
|
|
// 'use strict'; |
|
|
// 'use strict'; |
|
|
|
|
|
|
|
|
// PB : TODO -- make sure folder context is proper coz we can now run elxr from anywhere. |
|
|
// PB : TODO -- make sure folder context is proper coz we can now run elxr from anywhere. |
|
|
|
|
|
|
|
|
const { existsSync } = require('fs'); |
|
|
const { existsSync } = require('fs'); |
|
|
const fs = require('fs') |
|
|
const fs = require('fs') |
|
|
const { spawn, spawnSync } = require('child_process'); |
|
|
const { spawn, spawnSync } = require('child_process'); |
|
|
const cliargs = require('../elxr/cliargs'); // Use minimist... |
|
|
|
|
|
|
|
|
const cliargs = utils.cliargs; |
|
|
const processedArgs = cliargs(process.argv.slice(2)); |
|
|
const processedArgs = cliargs(process.argv.slice(2)); |
|
|
console.dir(processedArgs) |
|
|
console.dir(processedArgs) |
|
|
var globSync = require('glob').sync; |
|
|
var globSync = require('glob').sync; |
|
|
|
|
|
|
|
|
, 'https://git.bbh.org.in' |
|
|
, 'https://git.bbh.org.in' |
|
|
, '//172.16.0.27/repos' |
|
|
, '//172.16.0.27/repos' |
|
|
] |
|
|
] |
|
|
var defaultRepoServer = reposervers[1] |
|
|
|
|
|
|
|
|
var defaultRepoServer = reposervers[0] |
|
|
|
|
|
|
|
|
var currentGitAuthUser ; // nodeShellExec('git', ['config', 'user.email']) ... PB : TODO-- get the current gittea username |
|
|
var currentGitAuthUser ; // nodeShellExec('git', ['config', 'user.email']) ... PB : TODO-- get the current gittea username |
|
|
var defaultRepoOwner = 'chess'; |
|
|
var defaultRepoOwner = 'chess'; |
|
|
|
|
|
|
|
|
// Serialize a set of functions that will execute to return a promises one after the other. |
|
|
|
|
|
// Will stop when any one fails unless continueOnFailure is true. |
|
|
|
|
|
// All tasks in iterables can be functions or promises. |
|
|
|
|
|
// promises as usual can return other promises or resolve to either truthy or falsy values. |
|
|
|
|
|
// functions must return a promise |
|
|
|
|
|
function any(iterable, continueOnFailure) { |
|
|
|
|
|
return iterable.reduce( |
|
|
|
|
|
(p, fn, i ,a) => { |
|
|
|
|
|
// console.log('accumulator :'); |
|
|
|
|
|
// console.log(p); |
|
|
|
|
|
if(Promise.resolve(p) === p ) { |
|
|
|
|
|
return p.then((pVal) => { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Falsy values are task failure. |
|
|
|
|
|
if(!pVal) { |
|
|
|
|
|
console.warn('Possible failure for result : ' + pVal) |
|
|
|
|
|
console.warn(a[i-1]) |
|
|
|
|
|
fn ? console.error("Fn : " + fn.toString()) : null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Truthy values are failures if obj has error=true. |
|
|
|
|
|
if(pVal && pVal.error) { console.error('Failed : ' + pVal.message + ' ' + pVal) } |
|
|
|
|
|
|
|
|
|
|
|
if(Promise.resolve(pVal) === pVal) { |
|
|
|
|
|
// Passed in function retured a promise. We still need to wait for it. |
|
|
|
|
|
pVal.then((pVal)=>{ |
|
|
|
|
|
|
|
|
|
|
|
// console.log('Then --pVal = ' + pVal + ' bContinue = ' + continueOnFailure ); console.log(p); |
|
|
|
|
|
if(!pVal && !continueOnFailure) { |
|
|
|
|
|
console.error(`E1 : i = ${i} : pVal :` + pVal); |
|
|
|
|
|
console.error('debugData 2 -------------------'); |
|
|
|
|
|
|
|
|
|
|
|
console.log("Cancelling remaining..."); |
|
|
|
|
|
throw 'Failed in reduce 1 ' |
|
|
|
|
|
} |
|
|
|
|
|
if(!fn && !continueOnFailure) { console.error('Error : No task specified.'); throw false;} |
|
|
|
|
|
else if(!fn) return false; |
|
|
|
|
|
return (Promise.resolve(fn) === fn ) ? fn : fn() ; |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
|
|
|
|
|
|
// We will stop on null resolved values on any one task unless continueOnFailure is true. |
|
|
|
|
|
// console.log('Then --pVal = ' + pVal + ' bContinue = ' + continueOnFailure ); console.log(p); |
|
|
|
|
|
if(!pVal && !continueOnFailure) { |
|
|
|
|
|
console.error(`E2 : i = ${i} : pVal :` + pVal); |
|
|
|
|
|
console.error('debugData 2 -------------------'); |
|
|
|
|
|
|
|
|
|
|
|
console.log("Cancelling remaining..."); |
|
|
|
|
|
throw 'Failed in reduce 2 ' |
|
|
|
|
|
} |
|
|
|
|
|
if(!fn && !continueOnFailure) { console.error('Error : No task specified.'); throw false;} |
|
|
|
|
|
else if(!fn) return false; |
|
|
|
|
|
return (Promise.resolve(fn) === fn ) ? fn : fn() ; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}).catch((error) => { |
|
|
|
|
|
console.error(`E3 : i = ${i} `); |
|
|
|
|
|
fn ? console.error("Fn : " + fn.toString()) : null; |
|
|
|
|
|
console.error('debugData 3-------------------------'); |
|
|
|
|
|
|
|
|
|
|
|
throw 'Failed in reduce 3 ' |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
else if(!p) { |
|
|
|
|
|
console.log("Bypass on failure"); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
, Promise.resolve(true) |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var __isElevated = null; |
|
|
var __isElevated = null; |
|
|
var isRunningElevated = ()=>{ |
|
|
var isRunningElevated = ()=>{ |
|
|
if(__isElevated === null) { |
|
|
if(__isElevated === null) { |
|
|
|
|
|
|
|
|
, 'loopback-jsonapi-model-serializer' |
|
|
, 'loopback-jsonapi-model-serializer' |
|
|
, 'elixir-config-development' |
|
|
, 'elixir-config-development' |
|
|
, 'elixir-config-test' |
|
|
, 'elixir-config-test' |
|
|
, 'cihsr-config' |
|
|
|
|
|
|
|
|
, 'cihsr-config-development' |
|
|
, 'cihsr-data' |
|
|
, 'cihsr-data' |
|
|
, 'elixir-data' |
|
|
, 'elixir-data' |
|
|
, 'loopback-connector-ds' |
|
|
, 'loopback-connector-ds' |
|
|
|
|
|
|
|
|
var options = { cwd : repo } |
|
|
var options = { cwd : repo } |
|
|
// console.log(repo) |
|
|
// console.log(repo) |
|
|
return [ |
|
|
return [ |
|
|
['git', ['remote', 'add', 'chess', 'http://git.bbh/chess/elxr.git'], { cwd : repo }] |
|
|
|
|
|
|
|
|
['git', ['remote', 'add', 'chess', `${defaultRepoServer}/${user}/${repo}.git`], { cwd : repo }] |
|
|
, ['git', ['remote', 'set-url', '--push', 'chess', 'no-pushing'], { cwd : repo }] |
|
|
, ['git', ['remote', 'set-url', '--push', 'chess', 'no-pushing'], { cwd : repo }] |
|
|
, ['git', ['remote', 'set-url', 'origin', `http://git.bbh/${user}/${repo}.git`], { cwd : repo }] |
|
|
|
|
|
|
|
|
, ['git', ['remote', 'set-url', 'origin', `${defaultRepoServer}/${user}/${repo}.git`], { cwd : repo }] |
|
|
]} |
|
|
]} |
|
|
var x = (args)=>{ |
|
|
var x = (args)=>{ |
|
|
return ()=>{ |
|
|
return ()=>{ |
|
|
|
|
|
|
|
|
if(0){ |
|
|
if(0){ |
|
|
// PB : TODO -- Special google chrome profile for tests etc. |
|
|
// PB : TODO -- Special google chrome profile for tests etc. |
|
|
nodeShellExec('pwd', { inherit : true}); |
|
|
nodeShellExec('pwd', { inherit : true}); |
|
|
//$ "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --profile-directory="Profile 1" http://localhost:4200/tests/index.html?grep=loopback |
|
|
|
|
|
|
|
|
// /c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe --user-data-dir=/c/chess/instances/elixir_01/data/Google/Chrome/User\ Data --profile-directory="chess" |
|
|
|
|
|
// "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir="C:\chess\instances\elixir_01\data\Google\Chrome\User Data" --profile-directory="chess" http://localhost:4200/admin/crud/create/item |
|
|
|
|
|
// "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir="C:\chess\instances\elixir_01\data\Google\Chrome\User Data" --profile-directory="chess" http://localhost:4200/tests/index.html?grep=loopback |
|
|
nodeShellExec("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe", [ |
|
|
nodeShellExec("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe", [ |
|
|
"--profile-directory=Profile 1" |
|
|
"--profile-directory=Profile 1" |
|
|
, 'http://localhost:4200/tests/index.html?grep=model convert ember to loopback' + '&filter=none' /*+ '&filter=model convert ember to loopback'*/]); |
|
|
, 'http://localhost:4200/tests/index.html?grep=model convert ember to loopback' + '&filter=none' /*+ '&filter=model convert ember to loopback'*/]); |
|
|
|
|
|
|
|
|
// nodeShellExec('npm', ['init', '-y'], options); |
|
|
// nodeShellExec('npm', ['init', '-y'], options); |
|
|
// }) |
|
|
// }) |
|
|
|
|
|
|
|
|
var g = { |
|
|
|
|
|
'client' : ()=>{ |
|
|
|
|
|
console.info('Creating new ember client named : ' + processedArgs._[2] ) ; |
|
|
|
|
|
var step1 = nodeShellExec('cmd', ['/c', 'ember', 'new', processedArgs._[2]], { |
|
|
|
|
|
stdio: ['pipe', process.stdout, process.stderr], |
|
|
|
|
|
inherit : true, |
|
|
|
|
|
shell: true, |
|
|
|
|
|
cwd : path.dirname(__dirname), |
|
|
|
|
|
env: env |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
var g = { |
|
|
|
|
|
'client' : ()=>{ |
|
|
|
|
|
console.info('Creating new ember client named : ' + processedArgs._[2] ) ; |
|
|
|
|
|
var step1 = nodeShellExec('cmd', ['/c', 'ember', 'new', processedArgs._[2]], { |
|
|
|
|
|
stdio: ['pipe', process.stdout, process.stderr], |
|
|
|
|
|
inherit : true, |
|
|
|
|
|
shell: true, |
|
|
|
|
|
cwd : path.dirname(__dirname), |
|
|
|
|
|
env: env |
|
|
|
|
|
}) |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
'modelr' : ()=>{ |
|
|
|
|
|
var tasks = [ |
|
|
|
|
|
()=>{ |
|
|
|
|
|
var p = nodeShellExec('"ember"', [ |
|
|
|
|
|
'g' |
|
|
|
|
|
, 'modelr' |
|
|
|
|
|
, processedArgs._[2]], { |
|
|
|
|
|
inherit : true, shell: true, env: process.env |
|
|
|
|
|
}).then(()=>{ |
|
|
|
|
|
console.log('Blueprint generation complete for : ' + processedArgs._[2]) |
|
|
|
|
|
return true; |
|
|
|
|
|
}).catch((e)=>{ console.error(e) }) |
|
|
|
|
|
return p; |
|
|
|
|
|
}, |
|
|
|
|
|
()=>{ |
|
|
|
|
|
var chromePrefsFile = "C:\\chess\\instances\\elixir_01\\data\\Google\\Chrome\\User Data\\chess\\Preferences"; |
|
|
|
|
|
var chromeprefs = fs.readFileSync(chromePrefsFile, { encoding: 'utf8' }) |
|
|
|
|
|
chromeprefs = JSON.parse(chromeprefs) |
|
|
|
|
|
var previous = chromeprefs.download.default_directory; |
|
|
|
|
|
var parentDir = path.dirname(__dirname); |
|
|
|
|
|
chromeprefs.download.default_directory = parentDir + "\\client\\app\\templates\\components\\resource"; |
|
|
|
|
|
fs.writeFileSync(chromePrefsFile, JSON.stringify(chromeprefs)) |
|
|
|
|
|
// PB : TODO -- detect where chrome is installed. |
|
|
|
|
|
// PB : TODO -- set the download dir to the place where files are needed. |
|
|
|
|
|
var p = nodeShellExec('"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"', [ |
|
|
|
|
|
'--user-data-dir="C:\\chess\\instances\\elixir_01\\data\\Google\\Chrome\\User Data"' |
|
|
|
|
|
, '--profile-directory="chess"' |
|
|
|
|
|
, 'http://localhost:4200/admin/crud/create/' + processedArgs._[2]], { |
|
|
|
|
|
inherit : true, shell: true |
|
|
|
|
|
, env: process.env |
|
|
|
|
|
}).then(()=>{ |
|
|
|
|
|
chromeprefs.download.default_directory = previous; |
|
|
|
|
|
fs.writeFileSync(chromePrefsFile, JSON.stringify(chromeprefs)) |
|
|
|
|
|
return true; |
|
|
|
|
|
}).catch((e)=>{ console.error(e) }) |
|
|
|
|
|
return p; |
|
|
|
|
|
} |
|
|
|
|
|
, |
|
|
|
|
|
()=>{ |
|
|
|
|
|
console.log('Browser process should have closed here....') |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
any(tasks) |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
g[processedArgs._[1]](); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
g[processedArgs._[1]](); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return op[label] ? op[label]() : null; |
|
|
return op[label] ? op[label]() : null; |