12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112 |
-
- var __Promise = {};
-
-
-
-
-
-
-
-
-
-
-
-
- var stampedFilePfx = function(date) {
- return date.getFullYear() +
- ('0' + (date.getMonth() + 1)).slice(-2) +
- ('0' + date.getDate()).slice(-2) +
- ('0' + date.getHours()).slice(-2) +
- ('0' + date.getMinutes()).slice(-2) +
- ('0' + date.getSeconds()).slice(-2);
- }
- var runtimestamp = (new Date()).getTime();
-
- var promises = [];
- function startPromises(){
- promises.forEach(function(p){
-
- p();
-
- })
- }
-
- function isWin(){ return /^win/.test(process.platform) }
-
- try{
- __Promise = Promise
- var __require = require
- var map = Array.map
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- var selectedinstance = { root : path.resolve(".") }
- __main(selectedinstance)
- }
-
- catch(e){
-
-
- var wsh = true;
- function isWin(){ return true; }
-
-
- var clii = {
- question : function(q, answercb){
- WScript.Echo(q)
-
- var answer = WScript.StdIn.ReadLine()
- answercb(answer)
- }
- }
- var prompter = {
- ask : function(q){
-
-
-
-
- return new Promise(function(resolve, reject){
- clii.question(q, function(answer){
-
-
- resolve(answer)
- })
- })
- }
- }
-
-
-
- var cli = {
- prompt : function(choices, label, defaultchoice){
- var options = [];
- choices.forEach = forEach
- choices.forEach(function(choice){ options.push( ((+choice) + 1) + ' ' + choices[choice] )})
- return prompter.ask( label + ' \\n ' + options.join('\n') + '\n default ( <= ' + (defaultchoice || choices[0]) + ' ) : '
- ).then( function(choice){
- if(!choice) return defaultchoice || choices[0];
- if(choice && isNaN(+choice)) return choice;
- return choices[(+choice) - 1];
- })
- }
- }
-
- var any = function(iterable, continueOnFailure) {
-
- if(!iterable.reduce) iterable.reduce = reduce
-
- var cancelsignal = "cancelme{mangledrunid}"
- return iterable.reduce(
- function(p, tasq, i ,a) {
-
-
- var handleError = function(err, pVal){
- if(err !== cancelsignal) {
-
- console.warn('Possible failure for task with result : ' )
- console.log('Failed : ' + err.message + ' ')
- console.dir(pVal)
- console.dir(p)
- if(i>0 && a[i-1].info) console.dir(a[i-1].info)
- console.error('Error : ' + err.stack)
- console.error(a[i-1])
- a[i-1] ? console.log("tasq : " + a[i-1].toString()) : null;
- if(!continueOnFailure) {console.log("Cancelling remaining on any one failure ..."); throw cancelsignal}
- else return pVal;
-
- }
- }
-
- if(Promise.resolve(p) === p ) {
- if(i>0 && a[i-1].info) p.info = a[i-1].info;
- console.dir(' p.then is ' + p.then)
- return p.then( function(pVal){
-
-
-
-
-
-
-
-
- if(pVal && pVal.error) handleError(pVal, pVal)
-
- var trycall = function(tasq){
- try {
- var result = tasq()
- if(tasq.resultHandler) return tasq.resultHandler(result)
-
- return result
- } catch (error) {
- console.error(error);
- console.error('Error : ' + error ? error.stack : 'No stack')
- if(!continueOnFailure) throw error;
- }
- }
-
- var handleNext = function(){
-
-
- if(i>0 && a[i-1].info) console.dir(a[i-1].info)
- if(!tasq && !continueOnFailure) { console.log('Error : No task specified.'); throw false;}
- else if(!tasq) { console.log('Error : No task specified.'); return false;}
- return (Promise.resolve(tasq) === tasq ) ? tasq : trycall(tasq) ;
- }
-
- if(Promise.resolve(pVal) === pVal) {
-
- pVal.then(function(pVal){ return handleNext(); })
- }
- else return handleNext()
-
- })['catch'](function(error) {
- if(error !== cancelsignal) {
- console.log('E3 : i = ' + i);
- if(error.result) console.error(error.result)
- console.error('Error : ' + (error.message || error.messages))
- console.error('Error : ' + error.stack)
- tasq ? console.log("tasq : " + tasq.toString()) : null;
- console.log('debugData 3-------------------------');
-
- throw error
- }
- else throw cancelsignal;
- })
- }
- else if(!p) {
- handleError({ error : true, message : 'Failed without result' }, pVal)
- console.log("Bypass remaining on prior failure");
- return false;
- }
- else return p;
- }
- , Promise.resolve(true)
- );
- }
- var console = { log : function(m) {WScript.Echo(m)}, error : function(m) {WScript.Echo(m) }
- , dir : function(o) {
- for(var i in o){ console.log(i + ' : ' + o[i])}
- }
- }
-
-
- function forEach(eachFn){
- for(var i=0; i<this.length; i++) eachFn(this[i])
- }
- function reduce(reducnFn, iv){
- var acc = iv
- for(var i=0; i<this.length; i++) {acc = reducnFn(acc, this[i], i, this) }
- return acc;
- }
-
- function map(eachFn){
- var mapped = []
- for(var i=0; i<this.length; i++) mapped.push(eachFn(this[i]))
- return mapped
- }
-
- var wait = function(cb, ms) { WScript.Sleep(ms); cb() }
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var existsSync = function(filepath){ return fso.FileExists(filepath) }
- var fs = {
- writeFileSync : function(filepath, text) {
-
- var fh = fso.CreateTextFile(filepath, true);
- fh.WriteLine(text);
- fh.Close();
- }
-
- , mkdirSync : function(path) {
- fso.CreateFolder(path)
- }
- , readFileSync : function(filepath){
- var objFileToRead = fso.OpenTextFile(filepath,1)
- var strFileText = objFileToRead.ReadAll()
- objFileToRead.Close()
- return strFileText
- }
- , unlinkSync : function(filepath){ fso.DeleteFile(filepath) }
- }
-
- var path = {
- resolve : function(path){ return fso.GetAbsolutePathName(path) }
- , dirname : function(filepath) {
- var normalized = this.normalize(filepath)
- var li = normalized.lastIndexOf("\\")
- if( li > -1) {
- return normalized.substring(0, li)
- }
- }
- , normalize : function(path){
- return path.replace(/\//g,'\\');
- }
- }
-
-
- var selectedinstance = { root : path.resolve(".") }
-
- var existsSyncFolder = function(path){
- return fso.FolderExists(path)
- }
-
- var shell = new ActiveXObject('shell.application');
-
- promises.forEach = forEach
- function startPromises(){
- promises.forEach(function(p){
-
- p.start();
-
- })
- }
-
- function nodeShellExec(command, cargs, options){
-
- var elevatedshellexecute = function(cmd, argstr){
- shell.ShellExecute(cmd, argstr , "", "", 1);
- }
-
- var shellExec = function(cmd, argstr){
-
- var objShell = WScript.createobject("wscript.shell")
-
- var oExec = objShell.Exec(cmd + ' ' + argstr.join(' '))
- var result = {}
- var shellresult = { shell : objShell, result : result }
-
- var WshRunning = 0
- var WshFinished = 1
- var WshFailed = 2
- while(oExec.Status === WshRunning){
- WScript.StdOut.write('s.')
- WScript.Sleep(500)
- }
- var strOutput = '\n'
- switch(oExec.Status) {
- case WshFinished :
- strOutput = oExec.StdOut.ReadAll()
- result.success = true;
- result.code = 0
- break;
- case WshFailed :
- strOutput = oExec.StdErr.ReadAll()
- result.success = false;
- result.code = WshFailed
- break;
- default : strOutput = 'failed'
- break;
- }
- result.result = command + ' ' + cargs + ' exited with code ' + result.code
- result.messages = [strOutput]
-
-
-
-
-
-
-
-
- objShell = null;
- return shellresult;
- }
-
- var p = null;
- var pworker = function(resolve, reject){
-
- var pfx = selectedinstance.root + '\\.elxr\\run-' + runtimestamp + '\\' + stampedFilePfx(new Date())
-
- options = options || {
- runFile : path.normalize( pfx + "out.txt")
-
- }
- var runFile = null;
- var runFile = options.runFile || pfx + command + cargs + "out.txt";
-
- var args = cargs.concat()
-
-
-
-
-
-
-
-
-
-
-
- var runbat = path.normalize(pfx + "run.bat")
-
- fs.writeFileSync(runbat,
- '@echo off \r\n' +
- (options.cwd ? 'cd ' + options.cwd + ' \r\n' : '') +
-
- command + ' ' + args.join(' ') + ' \r\n' +
- 'cmd /c echo done >> ' + runFile + ' \r\n' +
- 'echo done'
- )
-
-
-
-
-
-
-
-
-
-
-
-
- console.log(options.waitmsg || ('awaiting ' + command + ' ' + args.join(' ')))
- var shellresult = shellExec( 'cmd', [ '/c', runbat])
-
-
-
-
-
- var wrapup = function(result) {
-
- try {
-
-
-
-
- resolve(result)
- }
- catch(e){
-
- if(e.message === 'Input past end of file') {
-
-
- resolve(result)
- }
- else {
-
- reject(e)
- }
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- wrapup(shellresult.result)
-
- }
- p = new Promise(pworker)
-
-
-
-
-
-
- return p;
- }
- createPromiseClass()
- __main( selectedinstance )
- }
-
- function createPromiseClass(overrides) {
-
- function reject(e){
- var p = this;
- console.log('Promise Rejection : ' + p.fn)
- console.dir(e)
-
- if(p.state !== PromiseClass.PENDING) { console.error ('Error : Promise Rejection can only be called once')}
- var __i = 0;
- var __e = e;
- do {
- for(var i = __i; i < p.chain.length; i++, __i = i) if(p.chain[i].isCatch) break;
- try {
- for(var i = __i; i < p.chain.length; i++, __i = i) if(p.chain[i].isCatch) { p.chain[i](__e); break; }
- __i++;
- __e = null;
- }
- catch(e){ __i++; __e = e}
- } while(__e)
- do {
- try { for(var i = __i; i < p.chain.length; i++, __i = i) if(!p.chain[i].isCatch) { p.result = p.chain[i](p.result); } }
- catch(e){
- __i ++;
- do {
- try {
- for(var i = __i; i < p.chain.length; i++, __i = i) if(p.chain[i].isCatch) { p.chain[i](__e); break; }
- __i ++;
- __e = null;
- }
- catch(e){ __i++; __e = e}
- } while(__e)
- }
- } while ( __i < p.chain.length )
- p.state = PromiseClass.REJECTED;
- }
-
- function resolve(result){
- var p = this;
-
- if(p.state !== PromiseClass.PENDING) { console.error ('Error : Promise Resolve can only be called once')}
- p.result = result;
- if(PromiseClass.resolve(p.result) === p.result) {
-
- waitForResult(p.result, function(r){ p.processchain(r) })
- }
- else {
-
-
- return p.processchain(result)
- }
- };
-
- function processchain(r){
-
- var __i = 0;
- var i = __i;
- var __e = null;
- p = this;
-
-
- function __processchain(r){
-
- function waitForThen(p){
- if(i < p.chain.length) {
- if(!p.chain[i].isCatch) {
-
- try {
- p.result = p.chain[i](p.result)
-
- if(PromiseClass.resolve(p.result) === p.result) {
-
-
-
- p.result.start()
-
- waitForResult(p.result, function(r){
-
-
- p.result = r; i++; __i = i;
- waitForThen(p)
- })
- }
- else {
- i++; __i = i;
- waitForThen(p)
- }
- }
- catch(e) {
- i++; __i = i;
- __e = e;
- console.log('failed on index ' + __i + p.chain[__i-1] )
- console.dir(e)
- waitForCatch(p);
- }
- }
- else {
-
- i++; __i = i;
- waitForThen(p)
- }
- }
- else return p.state = PromiseClass.FULFILLED;
- }
- function waitForCatch(p) {
- if(i < p.chain.length) {
- if(p.chain[i].isCatch) {
- console.log('chain idx : ' + i + ' Executing : catch : ' + p.result + ' ' + p.chain[i])
- try {
- p.result = p.chain[i](__e);
-
- if(PromiseClass.resolve(p.result) === p.result) {
- p.result.start()
- waitForResult(p.result, function(r){
- p.result = r; i++; __i = i;
- })
- waitForThen(p)
- }
- else {
- p.result = r; i++; __i = i;
- waitForThen(p)
- }
- }
- catch(e){ i++; __i = i;; __e = e; waitForCatch(p) }
- }
- else {
- i++; __i = i;
- waitForCatch(p)
- }
- }
- else return p.state = PromiseClass.REJECTED
- }
- waitForThen(p);
- }
- __processchain(r)
- }
-
- var create = function(fn){
- var p = {
- then : function(thenfn){
-
- thenfn.isThen = true
-
- p.chain.push(thenfn)
- return p;
- }
- , 'catch' : function(catchfn) {
- catchfn.isCatch = true
- p.chain.push(catchfn)
- return p;
- }
- , start : function(){
- if(this.started) {
- console.error('Cannot start more than once...')
- return p
- };
- this.started = true;
- this.fn = fn;
- try { fn( function(r){
-
- p.resolve(r) } , function(r){ p.reject(r) } ) }
- catch(e){
-
-
-
-
-
- p.reject(e)
- }
- return p
- }
- , state : PromiseClass.PENDING
- , chain : []
- , reject : reject
- , resolve : resolve
- , processchain : processchain
- }
- p.chain.forEach = forEach;
- return p;
- }
-
- var PromiseClass = function(fn /*, donotstart */){
- var p = create(fn)
-
-
-
-
-
- return p
- }
-
- PromiseClass.PENDING = 1
- PromiseClass.FULFILLED = 2
- PromiseClass.REJECTED = 3
-
- PromiseClass.isSETTLED = function(p){ p.state === PromiseClass.FULFILLED || p.state === PromiseClass.REJECTED }
-
- PromiseClass.resolve = function(v){
- if(v && v.then) return v;
- var p = create(function(resolve, reject){
- resolve(v)
- });
-
-
-
- return p;
- }
-
- function waitForResult(p, cb){
- if(!p) return cb(p)
- if(p.state !== PromiseClass.PENDING) cb(p.result)
-
- if(p.runFile && false) {
- while(!existsSync(p.runFile) && p.state === PromiseClass.PENDING) {
- console.log('Waiting for ResultFle'); wait(cb, 500)
- }
- cb(p.result)
- }
- else {
-
-
- function waiter(){
-
- if(p.state === PromiseClass.PENDING) wait(waiter, 500);
- else return cb(p.result)
- }
- wait(waiter, 500)
-
- }
- }
-
- PromiseClass.all = any;
-
- PromiseClass.__all = function(arr){
- arr.forEach = forEach;
- var resultPs = [];
- var results = [];
- console.log('All : ' + arr.length)
- var pAll = new PromiseClass(function(resolve, reject){
-
- console.log('All started : ' + pAll)
-
-
- arr.forEach(function(p){
- if(!p.then) { var pfn = p;
- p = new PromiseClass(function(resolve, reject){
- try{
- resolve(pfn())
- }
- catch(e){
- reject(e)
- }
- })
- p.start()
- }
- else {
-
-
-
- }
- resultPs.push(p)
-
- })
-
-
- var allwaitr = function(){
- var allResolved = true
- console.log('resultPs : ' + resultPs.length)
- for(var rIdx =0; rIdx < resultPs.length; rIdx++ ){
-
- if(resultPs[rIdx]) {
- allResolved = false
- waitForResult(resultPs[rIdx], function(r){
- if(Promise.resolve(r) !== r) results[rIdx] = r; resultPs[rIdx] = null;
- })
- break;
- }
- }
- if(allResolved) {
-
-
- resolve(results)
- }
- else wait(allwaitr, 500)
- }
- wait(allwaitr, 500)
- })
-
-
- return pAll
- }
-
-
- Promise = PromiseClass;
- return PromiseClass;
- }
-
- function __main( selectedinstance ){
- var downloadsdir = selectedinstance.root + '/Downloads';
-
- var callsheltask = function(args) { return function() { return nodeShellExec.apply(null, args) } }
- var gitUser = 'guest';
- var gitEmail = 'guest@bbh.org.in';
-
- var BUILD_VERSION = '[VI]Version: {version} - built on {date}[/VI]';
- function getVersion() { return BUILD_VERSION; }
- console.log(getVersion())
-
- function ensureDirectoryExistence(filePath) {
- var dirname = path.dirname(filePath);
- if (existsSyncFolder(dirname)) {
- return filePath;
- }
- ensureDirectoryExistence(dirname);
- fs.mkdirSync(dirname);
- return filePath;
- }
-
- var getTaskCheckExists = function(command, options) {
- options = options || {}
- return function() {
- var runFile = path.normalize(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/' + stampedFilePfx(new Date()) + 'where' + command + "out.txt");
- var p = nodeShellExec.apply(null, ['cmd', ['/c', 'where', command], { runFile : runFile } ])
- p.runFile = runFile;
- if (options.ignorefailures) {
- return p.then(function(v) {
-
- return v })['catch']( function(e) {
- console.error(e);
-
- throw e;
- })
- }
- else return p.then(function() {
-
- return v });
- }
- }
-
- function verifyAndInstallPrerequisites() {
- fs.writeFileSync(ensureDirectoryExistence(downloadsdir + '/readme.txt'), getVersion() + ' Your local downloads for this instance');
- var downloadbatch =
- "::************************************************************************** \r\n \
- :Download_ <url> <File> \r\n \
- Powershell.exe ^\r\n \
- $AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'; ^\r\n \
- [System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols; ^\r\n \
- (New-Object System.Net.WebClient).DownloadFile('%1','%2') \r\n \
- exit /b \r\n \
- ::**************************************************************************";
- ensureDirectoryExistence(path.normalize(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/readme.txt'))
- fs.writeFileSync(path.normalize(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat'), downloadbatch);
-
- var downloadtasks = [];
- var installtasks = [];
- prerequisites.forEach(function(preq) {
- var p = preq.exists().then(function(exists) {
- if (exists) console.log( preq.shellcmd + ' exists');
- else {
- console.log(exists)
- console.log(preq.shellcmd + ' is not installed');
- return preq.preinstallsteps().then(function(){
-
- installtasks.push( function(){ return preq.install() } );
- })
- }
- })
-
- downloadtasks.push( p )
- });
-
-
- var p = Promise.all(downloadtasks).then(function(){
-
- return any(installtasks) })
-
-
- return p
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- function exists(next){
- var self = this;
- console.log('checking existence of ' + self.shellcmd)
- return getTaskCheckExists(self.shellcmd, { ignorefailures: true })().then(function(exists) {
-
-
-
- if(exists && exists.messages.join(' ').indexOf(self.shellcmd) > -1 ) {
- return true;
- }
- else return false
- })['catch'](function(e){
-
- console.dir(e)
- return false;
- })
- }
-
-
- var prerequisites = [
- {
- shellcmd: 'git',
- url: 'https://github.com/git-for-windows/git/releases/download/v2.33.0.windows.2/Git-2.33.0.2-64-bit.exe'
- , installer: 'Git-2.33.0.2-64-bit.exe'
- , installcmd: ['cmd', ['/c', 'start',
- '/WAIT', downloadsdir + '/' + 'Git-2.33.0.2-64-bit.exe'
- , '/VERYSILENT'
-
- ]]
- , preinstallsteps: function() {
- var self = this;
- console.log('Git preinstall steps')
-
- var steps = [];
- steps.push(
- function(){
-
- var choices = { 0 : 'guest', 1 : 'chessdemo' }
- return cli.prompt(choices, 'git user name', gitUser).then(function(choice){ gitUser = choice } )
- }
- )
-
- steps.push(
- function(){
- var choices = { 0 : 'guest@bbh.org.in', 1 : 'chessdemo@bbh.org.in' }
- return cli.prompt(choices, 'git user email', gitEmail).then(function(choice){ gitEmail = choice })
- }
- )
- steps.push(
- function(){
- if (!existsSync(downloadsdir + '/' + self.installer)) {
- return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', [self.url, downloadsdir + '/' + self.installer])
- }
- else {
- console.log(self.installer + ' Already exits Download skipped.')
- return Promise.resolve(true)
- }
- }
- )
- return any(steps)
-
- }
- , installsteps: function () {
- var self = this;
- console.log('Git Installsteps called')
- var ifns = [self.installcmd]
- if(!ifns.map) ifns.map = map;
- return any(ifns.map(callsheltask))['catch'](function(e){
- if(e.code === 1602) {
- console.warn("Installation was probably cancelled.")
- }
- else throw e
- })
- }
- , postinstallsteps: function(){
-
-
- var steps = [];
- steps.push(
- function(){
- var choices = { 0 : 'guest', 1 : 'chessdemo' }
- return cli.prompt(choices, 'git user name', gitUser).then(function(choice){ gitUser = choice } )
- }
- )
-
- steps.push(
- function(){
- var choices = { 0 : 'guest@bbh.org.in', 1 : 'chessdemo@bbh.org.in' }
- return cli.prompt(choices, 'git user email', gitEmail).then(function(choice){ gitEmail = choice })
- }
- )
-
- return any(steps).then(function(){
- var steps = [
- ['git', ['config', '--global', '--add', 'user.name', gitUser]]
- , ['git', ['config', '--global', '--add', 'user.email', gitEmail]]
- ]
-
- if(!steps.map) steps.map = map;
- return any(steps.map(callsheltask)).then(function(){
-
- })
- });
- }
- , install: function () {
- var self = this;
- console.log('Git Install called')
- return any([ function(){ return self.installsteps() }, function(){ return self.postinstallsteps() } ])
- }
- , verifyAndInstall : function(){
- var self = this;
- return self.exists().then( function(exits) {
- if(exists) return self.getUser(null, function(){ return self.postinstallsteps() } )
- else return self.install();
- })
- }
- , exists : exists
- , getUser : function(repo, onNoResult){
-
-
- onNoResult = onNoResult || function(){return false}
- var globalOrLocal = '--global';
- if(!repo) globalOrLocal = '--global';
- else globalOrLocal = '--local'
- var fns = [['git', ['config', globalOrLocal, '--get-all', 'user.name']]]
- if(!ifns.map) ifns.map = map;
- return any(fns.map(callsheltask)).then(function(result){
-
- if(!result.success) return onNoResult()
- else {
- var users = result.messages[0].trim().split('\n');
- if(users.length === 0 ||
- users.length === 1 && users[0] === 'guest') {
-
- return onNoResult()
- }
- else return users[0];
- }
- })
- ['catch'](function(e){
- console.log(e)
- return onNoResult()
- })
- }
- }
- ,
- {
- shellcmd: 'node',
- url: 'https://nodejs.org/dist/v14.17.6/node-v14.17.6-x64.msi'
- , installer: 'node-v14.17.3-x64.msi'
- , installcmd: ['MSIEXEC.exe', ['/i'
- , path.normalize(downloadsdir + '/' + 'node-v14.17.3-x64.msi')
- , 'ACCEPT=YES', '/passive']]
- , install : function() {
- var self = this;
- var ifns = [self.installcmd]
- if(!ifns.map) ifns.map = map;
- return any(ifns.map(callsheltask))['catch'](function(e){
- if(e.code === 1602) {
- console.warn("Installation was probably cancelled.")
- }
- else throw e
- })
- }
-
- , exists : exists
- , preinstallsteps: function() {
- var self = this;
- console.log('Node preinstall steps')
-
- var steps = [];
- steps.push(
- function(){
- if (!existsSync(downloadsdir + '/' + self.installer)) {
- return nodeShellExec(selectedinstance.root + '/.elxr/run-' + runtimestamp + '/download.bat', [self.url, downloadsdir + '/' + self.installer]
- , { waitmsg : 'downloading node please wait' })
- }
- else {
- console.log(self.installer + ' Already exits Download skipped.')
- return Promise.resolve(true)
- }
- }
- )
-
- return any(steps)
-
- }
- }
- ,
- {
- shellcmd: 'elxr'
- , installcmd: [ isWin() ? 'npm.cmd' : 'npm' , ['link'], { cwd : selectedinstance.root + '\\elxr' }]
- , preinstallsteps: function() {
- var self = this;
- console.log('Elxr preinstall steps')
-
- var steps = [];
- steps.push(
- function(){
- console.log('Elxr PreInstallsteps called')
- var ifns = [ ['git', ['clone', 'http://git.bbh/chess\\elxr'] ] ]
- if(existsSyncFolder( selectedinstance.root + '\\elxr')) {
- if(existsSyncFolder( selectedinstance.root + '\\elxr\\.git')) {
-
- ifns = [ ['git', ['pull'], { cwd : selectedinstance.root + '\\elxr' } ] ]
- }
- else {
- throw 'elxr subfolder not recognized as a git repository. Please cleanup and continue.'
- }
- }
- else console.log(selectedinstance.root + '\\elxr' + ' NOT FOUND ')
- if(!ifns.map) ifns.map = map;
- return any(ifns.map(callsheltask))['catch'](function(e){
- if(e.code === 1602) {
- console.warn("Installation was probably cancelled.")
- }
- else throw e
- })
- }
- )
- return any([any(steps)])
- }
- , installsteps: function () {
- var self = this;
- console.log('Elxr Installsteps called')
- var ifns = [self.installcmd]
- if(!ifns.map) ifns.map = map;
- return any(ifns.map(callsheltask))['catch'](function(e){
- if(e.code === 1602) {
- console.warn("Installation was probably cancelled.")
- }
- else throw e
- })
- }
- , install: function () {
- var self = this;
- console.log('Elxr Install called')
- return any([ function(){ return self.installsteps() } ])
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- , exists : exists
-
- }
- ]
-
- if(!prerequisites.forEach) prerequisites.forEach = forEach;
-
-
-
-
- promises.push(verifyAndInstallPrerequisites())
-
- startPromises();
- }
|